45
Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP) Date de publication : 10 juillet 2010 Dernière mise à jour : Dans ce tutoriel, vous apprendrez comment gérer et mettre en place une interraction entre l'utilisateur et un document.

par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document

par Olivier Lebeau (Heureux-oli sur DVP)

Date de publication : 10 juillet 2010

Dernière mise à jour :

Dans ce tutoriel, vous apprendrez comment gérer et mettre en place une interraction entrel'utilisateur et un document.

Page 2: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 2 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

1 - Introduction.............................................................................................................................................................32 - Le champ ASK.......................................................................................................................................................33 - Les InputBox.......................................................................................................................................................... 64 - Les UserFoms......................................................................................................................................................11

4-A - Les contrôles...............................................................................................................................................144-A-1 - L'intitulé ou "Label".............................................................................................................................144-A-2 - La Zone de texte ou "TextBox".......................................................................................................... 154-A-3 - Zone de liste modifiable ou "ComboBox"...........................................................................................164-A-4 - Zone de liste ou "ListBox"..................................................................................................................194-A-5 - Case à cocher ou "CheckBox"...........................................................................................................204-A-6 - Bouton d'option ou "OptionButton".....................................................................................................214-A-7 - Bouton à bascule ou "ToggleButton"..................................................................................................224-A-8 - Cadre ou "Frame"...............................................................................................................................234-A-9 - Bouton de commande ou "CommandButton".................................................................................... 234-A-10 - Contrôle Multipage........................................................................................................................... 244-A-11 - Toupie ou "SpinButton".....................................................................................................................244-A-12 - Image................................................................................................................................................ 25

4-B - Les évènements..........................................................................................................................................254-C - Les propriétés............................................................................................................................................. 284-E - Mise en ordre des contrôles....................................................................................................................... 284-F - La pratique.................................................................................................................................................. 28

4-F-1 - Un UserForm pour afficher les propriétés du document.................................................................... 444-G - Les contrôles ActiveX.................................................................................................................................44

5 - Remerciements.................................................................................................................................................... 45

Page 3: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 3 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

1 - Introduction

Bon nombre de questions sont basées sur la méthode à utiliser pour dialoguer avec l'utilisateur lors de la créationd'un nouveau document ou lors de l'ouverture d'un document existant.

Plusieurs méthodes sont utilisables, on peut citer les champs ASK, qui vont demander des informations au traversd'une boîte de dialogue, les InputBox (Boîtes de dialogue) qui peuvent être mise en place avec une macro ou encoreun UserForm qui est une façon un peu plus élaborée de "dialoguer" avec l'ustilisateur.

Les captures d'écran sont issues de la version 2010, mais le principe reste le même pour les versions antérieuresde Word.

2 - Le champ ASK

Le champ ASK fait parties des champs que l'on peut utiliser en Word, les champs ne nécessitent aucuneconnaissance en programmation, ils sont utilisables directement depuis l'interface graphique.

Pour insérer un champ "Demander" ou "Ask", il est plus facile d'utiliser l'interface graphique, elle évite les éventuelleserreurs de saisie.

Vous pouvez utiliser autant de champs Ask que vous le souhaitez, mais n'abusez pas de cette méthode, elle risquede lasser très rapidement les utilisateurs.

Pour insérer un champ Ask, vous devez allez dans l'onglet Insertion et le groupe Texte. La commande se trouvesous le bouton QuickPart.

Vous obtenez une boîte de dialogue contenant les différents champs qu'il est possible d'insérer en Word. Notre champAsk se trouve dans la catégorie Publipostage.

Page 4: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 4 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Une boîte de dialogue vous est proposée pour lajout de ce champ.

Nous utiliserons trois parties de ce champ.

Page 5: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 5 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

1 Le texte qui sera affiché dans la boîte de dialogue "Ask".2 Le signet qui sera utilisé. Si le signet existe déjà, il sera déplacé au point d'insertion (endroit où se trouve le

curseur de la souris).3 Le texte qui sera affiché si l'utilisateur n'entre pas de texte.

Pour afficher le résultat, vous devez utiliser un champ REF qui fera référence au signet que vous avez choisi pourvotre champ ASK.

Et le résultat :

Page 6: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 6 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Lorsque l'utilisateur va ouvrir le document, la boîte de dialogue sera affichée et le résultat sera visible dans le champREF.

Pour le champ REF, nous allons utiliser la même méthoque que pour le champ ASK.

Ce champ se trouve dans la partie Liaisons et renvois, il ne reste que le signet à sélectionner, dans l'exemple,c'est S1.

Si vous souaitez recommencer le remplissage, vous devez demander à Word d'actualiser les champs par lacombinaison de touches Ctrl + A pour sélectionner le document et ensuite F9 pour actualiser les champs.

Les champs ASK doivent se trouver dans le document, si vous les insérez dans l'entêteou le pied de page, ils sont inutilisables dans le document.

3 - Les InputBox

Pour utiliser les InputBoxes, vous allez devoir utiliser du VBA. ce sont des objets que l'on utilise en programmation.Les InputBoxes ne sont pas modifiables, ils ne contiennent qu'une zone de texte, des boutons que l'on peut choisiret une "icône".Il est malgré tout possible d'utiliser les InputBoxes avec des contrôles supplémentaires, vous trouverez quelquesinformations dans ce tutoriel.

Pour adresser du texte dans un document, la méthode la plus facile reste le signet. Vous devrez donc préparer votredocument en y ajoutant des signets qui recevront les données collectées par votre code.

Si vous n'avez jamais fait de VBA, je vous conseille de lire ce tutoriel qui s'adresse aux débutants.

Page 7: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 7 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Pour ouvrir le VBE (Visual Basic Editor) qui est léditeur de code VBA, vous avez plusieurs possibilité, mais celle queje retiens est la combinaison de touches Alt + F11.

Je vous conseille de créer un modèle, de cette manière, le document original ne risquepas d'être altéré par une mauvaise manipulation d'un de vos utilisateurs.

Dans la fenêtre Explorateur de projets de l'éditeur, nous obtenons ceci :

Un double clic sur ThisDocument va ouvrir la fenêtre d'édition

Avant

Page 8: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 8 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Après

C'est dans cette fenêtre que nous allons saisir notre code.Comme nous souhaitons que le code s'exécute dès la création d'un nouveau document, nous allons utiliserl'èvenement New. Cet évènement se produit lors de la création d'un nouveau document basé sur notre modèle.

Veillez à ce que le code soit inséré dans le module de votre modèle, si le code se trouvedans le modèle normal, il sera exécuté à chaque création d'un nouveau document, ce quiprovoquera imanquablement des erreurs.

Pour utiliser les évènements liés aux documents, le plus simple est de choisir l'objet document dans la liste déroulante.

Choix de l'objet

En principe l'évènement qui est pris par défaut sera New.

Page 9: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 9 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Si ce nest pas le cas et que vous souhaitez ne pas faire d'erreur, vous pouvez choisir l'évènement lié à cet objetdans la liste déroulante de droite.

Nous voilà prêt pour l'écriture de notre code.

La fonction InputBox renvoie une valeur, si vous ne souhaitez pas traiter cette valeur après sa saisie, il suffit del'adresser directement au signet de votre document, dans le cas contraire, vous serez amené à l'affecter à unevariable.

Sans variable

Private Sub Document_New()

ActiveDocument.Bookmarks("S1").Range.Text = InputBox("Entrez une valeur qui sera insérée sur le signet S1")

End Sub

Si vous préférez utiliser des variables. Je ne vous conseille l'utilisation des variables que si vous les traitez. Commedans le cas d'une date, vous pouvez tester si c'est une date et si elle est postérieure à la date du jour.

Avec variable

Private Sub Document_New()'Déclaration des variablesDim stMaPremiereReponse As String

'Affectation de la valeur à la variablestMaPremiereReponse = InputBox("Entrez une valeur qui sera insérée sur le signet S1")

'Affectation du contenu de la variable au signetActiveDocument.Bookmarks("S1").Range.Text = stMaPremiereReponse

End Sub

Page 10: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 10 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Le code peut contenir de nombreux InputBoxes, ils seront traités dans le même ordre que le code. Vous pouvezutiliser des boucles ou des conditions dans votre code.

Exemple avec condition

Private Sub Document_New()'Déclaration des variablesDim stMaPremiereReponse As String'Etiquetteici:'Affectation de la valeur à la variablestMaPremiereReponse = InputBox("Entrez une valeur qui sera insérée sur le signet S1")'Si aucun texte n'est entré, on retourne vers l'étiquetteIf Len(stMaPremiereReponse) = 0 Then GoTo ici

End Sub

Nous allons en profiter pour découvrir ce que peut faire un InputBox. Vous aurez remarqué qu'il contient deux boutons,qu'il possède une barre de titre. Il est en outre possible de le positionner.

Les boutonsIl possède deux boutons, Ok et Annuler. Le bouton OK sert à valider. Le bouton Annuler lorsqu'il est utilisé va renvoyerune chaîne de longueur nulle, il ne va en aucun cas mettre un terme à la procédure.

Le texte ou PromptLe texte de votre InputBox est une chaîne de caractère qui ne peut dépasser 1024 caractères. Lorsque vous souhaitezutiliser plusieurs lignes, vous devez insérer des Retours à la ligne (Carriage Return) par l'insertion de Chr(13) ouvbCrLf.

Le titrePar défaut, le titre de votre InputBox est Microsoft Word. Vous pouvez changer ce titre par un titre personnel.

Valeur par défautIl est possible de spécifier une valeur qui sera affichée par défaut dans votre InputBox.

La positionSi vous ne spécifiez pas de valeurs pour les arguments xpos et ypos, votre InputBox sera centré sur l'écran.

Nous allons illustrer ces possibilités par un petit exemple et réutiliser les valeurs introduites. Pour chaque InputBoxaffiché, nous allons récupérer les valeurs des précédents pour les afficher, nous nous limiterons à trois objets. Lesdonnées récoltées seront insérées dans une table qui contiendra une ligne de 3 cellules.

Petit exemple

Sub MesInputsBoxes()'Déclaration des variables'Les trois titresDim stTit01 As String, stTit02 As String, stTit03 As String'Le texte entré concaténéDim stTextIn As String'Le texte de chaque InputBoxDim stTemp As String'Les trois promptsDim stText01 As String, stText02 As String, stText03 As String'La tableDim oTbl As Table

'Affectation de la tableSet oTbl = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=1, numcolumns:=3)With oTbl .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle

Page 11: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 11 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Petit exemple .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle .Borders(wdBorderRight).LineStyle = wdLineStyleSingle .Borders(wdBorderTop).LineStyle = wdLineStyleSingle .Borders(wdBorderHorizontal).LineStyle = wdLineStyleSingle .Borders(wdBorderVertical).LineStyle = wdLineStyleSingleEnd With

'Initialisation des vriables textestTextIn = "Vous avez entré : " & vbCrLf'Les titre de nos InputboxesstTit01 = "Entrez un premier texte !"stTit02 = "Entrez un second texte !"stTit03 = "Entrez un troisième texte !"'Le text des InpuboxesstText01 = "Entrez votre premier texte "stText02 = "Entrez votre deuxième texte "stText03 = "Entrez votre dernier texte "

'Premier InputBoxstTemp = InputBox(stText01)oTbl.Cell(1, 1).Range.Text = stTemp'Concaténation du résultatstTextIn = stTextIn & vbCrLf & stTemp

'Deuxième InputBoxstTemp = InputBox(stTextIn & vbCrLf & vbCrLf & stText02)oTbl.Cell(1, 2).Range.Text = stTemp'Concaténation du résultatstTextIn = stTextIn & vbCrLf & stTemp

'Dernier InputBoxstTemp = InputBox(stTextIn & vbCrLf & vbCrLf & stText03)oTbl.Cell(1, 3).Range.Text = stTemp'Concaténation du résultatstTextIn = stTextIn & vbCrLf & stTemp

'Affichage du résultatMsgBox stTextIn

'Libération des objetsSet oTbl = Nothing

End Sub

Ce code même s'il est long reste très simple à la lecture.

Si vous avez utilisé l'exemple ci-dessus, vous aurez certainement remarqué que ce n'est pas très convivial. LesInputboxes à répétition sont lassantes et il n'est pas facile de changer les données de la premère boîte après l'avoirvalidée. La vraie solution pour un "dialogue" avec l'utilisateur est le UserForm. Les données restent disponibles pourmodification tant que l'ensemble n'a pas été validé, ce qui représente un gros avantage.

4 - Les UserFoms

Les UserForms ne doivent pas être confondu avec les formulaires. Ce sont deux chosestotalement différentes.

Les UserForms sont des objets VBA que l'on insére et modifie via l'interface VBE (Visual Basic Editor). L'ajout d'unUserForm à votre projet est très facile, séléctionnez le projet.

Page 12: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 12 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Dans le menu Insertion, choisissez UserForm.

Vous avez maintenant un UserForm dans votre projet.

Page 13: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 13 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Lorsque vous affichez le UserForm, il est accompagné de sa Boîte à outils. Ce sont eux qui vont nous permettred'ajouter des contrôles sur notre UserForm.La manipulation pour ajouter un contrôle à un UserForm est assez simple, il suffit de cliquer sur le contrôle souhaitéet de le dessiner à la souris sur le UserForm.

Et lorsque l'on relâche la souris, notre contrôle est dessiné sur le UserForm.

Page 14: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 14 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Les valeurs contenues dans les contrôles sont volatiles, quand le UserForm est fermé,toutes les données sont perdues. Si vous ne les enregistrez pas, vous ne pourrez plusles utiliser.

4-A - Les contrôles

4-A-1 - L'intitulé ou "Label"

Ce contrôle est principalement utilisé pour afficher des informations, il n'est pas statique, les données qu'il affichepeuvent être mise à jour, mais n'est pas interractif, il n'est pas possible d'y effectuer une saisie.Ce contrôle réagit à certains évènements comme le clic.

La propriété qui permet de modifier le texte affiché par ce contrôle est "Caption", on accède à cet objet en utilisantl'objet parent qui est le UserForm.

UserForm1.Label1.Caption = "Le texte de mon étiquette"

VBA permet un accès plus rapide lorsque l'on se trouve dans le module dépendant d'un d'objet d'utiliser "Me" pourfaire directement référence à cet objet.Si le code que l'on utilise se situe dans le module du document, on fera référence au sous objet en utilisant l'objetparent.

Sub Document_Open()UserForm1.Label1.Caption = "Venant du code du document"End Sub

Alors que si le code se trouve dans le module du UserForm, on fera référence à "Me".

Private Sub UserForm_Click()Me.Label1.Caption = "Mon étiquette"End Sub

Page 15: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 15 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Sur un évènement

Private Sub Label2_Click()Me.Label1.Caption = "Vous avez cliqué sur l'étiquette 2 !"End Sub

4-A-2 - La Zone de texte ou "TextBox"

Ce contrôle est interactif, il peut être utilisé pour afficher ou pour saisir des données, il réagit à certains évènementcomme la mise ajour, le clic, ...

Pour y injecter des données, on utilise la propriété .Text

Me.TextBox1.Text = "Mon texte"

On uilise la même propriété pour récupérer le texte qui a été introduit par l'utilisateur ou inséré par code.

Debug.Print Me.TextBox1.Text = "Mon texte"

Les TextBoxes réagissent aux évènements. L'évènement que j'utilise le plus est Controle_AfterUpdate, il se produitlorqu'une modification du contenu du contrôle a été effectuée.L'évènement proposé par défaut lors d'un double clic sur le contrôle est Controle_Change, il se produit lors de chaquechangement de donnée dans le contrôle. Si vous entrez un texte, il se produira à chaque ajout ou suppression decaractère.

Page 16: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 16 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

4-A-3 - Zone de liste modifiable ou "ComboBox"

Les listes modifiables permettent de proposer aux utilisateurs de faire un choix parmis les éléments qui la composent.En fonction de valeur donnée à la propriété MatchRequired (True ou False), si cette valeur est True, on impose àl'utilisateur que l'élément saisi soit présent dans la liste, dans le cas contraire, la saisie est libre.

Par défaut, les listes sont vides, les éléments qui la composent sont ajoutés à l'aide du code. Il y a deux méthodespour ajouter des éléments à la lsite, soit on ajoute chaque élément séparément, soit on utilise un tableau.Dans la majorité des cas, on utilise l'évènement Initialize du UserForm.

Pour ajouter des éléments un par un il suffit de répéter la même ligne en changeant l'argument.

Avec une liste

Private Sub UserForm_Initialize()'Ajout des éléments dans la listeMe.ComboBox1.AddItem "AAA"Me.ComboBox1.AddItem "BBB"Me.ComboBox1.AddItem "CCC"Me.ComboBox1.AddItem "DDD"

End Sub

Page 17: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 17 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Avec un tableau

Private Sub UserForm_Initialize()Dim myTbl() As String

ReDim myTbl(4)

myTbl(1) = "AAA"myTbl(2) = "BBB"myTbl(3) = "CCC"myTbl(4) = "DDD"myTbl(0) = "ZZZ"

Me.ComboBox1.List() = myTbl

End Sub

Cette méthode peut être utilisée avec des tableau multidimentionels, dans ce cas, vous devez spécifier le nombre decolonnes que vous souhaitez dans votre contrôle. Cette opération peut être réalisée par le VBE ou dans votre code.

Par le code

Private Sub UserForm_Initialize()'Déclaration des variablesDim myTbl(4, 1) As String

'Remplissage du tableaumyTbl(1, 0) = "AAA"myTbl(2, 0) = "BBB"myTbl(3, 0) = "CCC"myTbl(4, 0) = "DDD"myTbl(0, 0) = "ZZZ"myTbl(1, 1) = "a-a-a"myTbl(2, 1) = "b-b-b"myTbl(3, 1) = "c-c-c"myTbl(4, 1) = "d-d-d"myTbl(0, 1) = "z-z-z"

'Définition du nombre de colonnes et de leur largeurWith Me.ComboBox1 .ColumnCount = 2 .ColumnWidths = "2 cm; 2 cm"End With 'Remplissage du contrôleMe.ComboBox1.List() = myTbl

End Sub

Le résultat avec nos deux colonnes.

Page 18: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 18 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

La valeur choisie ou introduite est récupérée avec la propriété Value du contrôle. Il est possible d'utiliser un évènementpour traiter la valeur ou de la traiter à par la suite.

Si l'on souhaite récupérer la valeur lorsque le contenu du Combo change, nous utiliserons l'évènement Change.

Private Sub ComboBox1_Change()Debug.Print Me.ComboBox1.ValueEnd Sub

Je vous déconseille cet évènement si la propriété MatchRequired est à True.

Si vous avez otpé pour une liste à deux colonnes, la propriété value renvoie l'élément contenu dans la colonne"BoundColumn". Si vous souhaitez récupérer une autre valeur, c'est la propriété Column() que vous utiliserez.

Private Sub ComboBox1_AfterUpdate()'Récupération de la valeur contenue dans la 'seconde colonneMe.TextBox1 = Me.ComboBox1.Column(1)End Sub

Le première colonne est la colonne 0

Page 19: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 19 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

4-A-4 - Zone de liste ou "ListBox"

Il existe peu de différences entre une Zone de liste modifiable (ComboBox) et un Zone de liste. Dans une Zone deliste, il n'est pas possible d'utiliser une valeur qui ne se trouve pas dans la liste. La surface occupée par une Zonede liste est plus importante que pour une Zone de liste modifiable.La liste est remplie de la même manière que pour une Zone d liste Modifiable.

Avec une liste

Private Sub UserForm_Initialize()'Ajout des éléments dans la listeMe.ListBox1.AddItem "AAA"Me.ListBox1.AddItem "BBB"Me.ListBox1.AddItem "CCC"Me.ListBox1.AddItem "DDD"

End Sub

Comme pour la zone de liste modifiable, nous pouvons utiliser un tableau à une dimension.

Avec un tableau

Private Sub UserForm_Initialize()Dim myTbl() As String

ReDim myTbl(4)

myTbl(1) = "AAA"myTbl(2) = "BBB"myTbl(3) = "CCC"myTbl(4) = "DDD"myTbl(0) = "ZZZ"

Me.ListBox1.List() = myTbl

End Sub

Ou encore un tableau à deux dimensions

Avec un tableau deux dimensions

Private Sub UserForm_Initialize()'Déclaration des variablesDim myTbl(4, 1) As String

'Remplissage du tableaumyTbl(1, 0) = "AAA"myTbl(2, 0) = "BBB"myTbl(3, 0) = "CCC"myTbl(4, 0) = "DDD"myTbl(0, 0) = "ZZZ"myTbl(1, 1) = "a-a-a"myTbl(2, 1) = "b-b-b"myTbl(3, 1) = "c-c-c"myTbl(4, 1) = "d-d-d"myTbl(0, 1) = "z-z-z"

'Définition du nombre de colonnes et de leur largeurWith Me.ListBox1.ColumnCount = 2.ColumnWidths = "2 cm; 2 cm"End With

'Remplissage du contrôleMe.ListBox1.List() = myTbl

Page 20: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 20 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Avec un tableau deux dimensions

End Sub

La récupération des données est elle aussi identique.

Récupération des données

Private Sub ListBox1_Click()Debug.Print Me.ListBox1.ValueEnd Sub

Ou encore pour la seconde colonne.

Private Sub ListBox1_Click()Debug.Print Me.ListBox1.Column(1)End Sub

Comme pour le combobox, la première colonne est la 0.

4-A-5 - Case à cocher ou "CheckBox"

La case à cocher est un contrôle qui ne peut avoir que deux états, coché ou pas coché, vrai ou faux.Elle possède une étiquette qui peut être modifiée avec la propriété Caption du contrôle.Comme tous les contrôle présents sur un UserForm, la case à cocher réagit à certains évènements.

Les contrôles CheckBox possèdent une étiquette.

La case à cocher ne possède que deux valeurs vrai ou faux et peut être récupérée à tout moment.

Page 21: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 21 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Me.CheckBox1.Value

4-A-6 - Bouton d'option ou "OptionButton"

Les boutons à options ont le même effet que les boutons à bascule. Lorsqu'ils sont dans un cadre, ils fonctionnentcomme s'ils étaient groupés et une seul bouton peut être actif par groupe.

Commencez par placer un cadre et ensuite les Boutons d'option.

Si vous n'utilisez pas de cadre, les contrôles Boutons d'opion réagiront comme s'ils faisaient tous partie du mêmegroupe. Pour pouvoir utiliser plusieurs "séries" de Boutons d'option, vous devrez utiliser autant de cadre que voussouhaitez avoir de groupe.

Avec plusieurs cadres, vous augmentez les choix des utilisateurs.

Page 22: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 22 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

La valeur des boutons à bascules est récupérée bouton après bouton.

Private Sub cmdEtatBoutonsOption_Click()'Déclaration des variablesDim myMsg As String'Exécution des testsIf Me.OptionButton1 Then myMsg = "Le premier bouton d'option est coché "If Me.OptionButton2 Then myMsg = myMsg & "Le second bouton d'option est coché "If Me.OptionButton3 Then myMsg = myMsg & "Le troisième bouton d'option est coché "MsgBox myMsg

End Sub

Comme la valeur du Bouton d'option est 0 ou 1, True ou False, il n'est pas nécessaire defaire un test logique.

Si vous déposez des contrôles boutons d'options sans utiliser de cadre, ils seront tousgroupés ensembles, vous n'aurez alors qu'un seul groupe pour tout votre UserForm.

4-A-7 - Bouton à bascule ou "ToggleButton"

Le bouton a bascule possède deux états enfoncé ou relaché. Ils sont comparables aux cases à cocher. La valeurrenvoyée est True lorsque le bouton est enfoncé et False lorsqu'il est relaché.

Page 23: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 23 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Si vous affectez la valeur True à ce contrôle, il sera enfoncé.

Me.ToggleButton1 = True

La valeur est récupérée de la même manière.

Debug.Print Me.ToggleButton1

4-A-8 - Cadre ou "Frame"

Le Cadre ou Frame est utilisé pour grouper ou entourer des contrôles.

Lorsqu'il est utilisé pour des boutons d'option, un seul de ces contrôles peut être coché.

4-A-9 - Bouton de commande ou "CommandButton"

On pourrait dire que c'est le contrôle principal. L'évènement par défaut de ce contrôle est Clic. C'est en général cecontrôle qui est utilisé pour "valider" une action.

Page 24: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 24 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Private Sub CommandButton1_Click()Debug.Print Me.ToggleButton1Me.CommandButton1.Caption = "Validé !"

End Sub

Ce contrôle possède une étiquette qu'il est possible de modifier au travers de propriétés du contrôle ou par le code.

4-A-10 - Contrôle Multipage

Avec un contrôle multipage, vous pouvez augmenter la surface utilisable de votre UserForm. En utilisant les onglets,vous pouvez accéder aux differentes pages de votre contrôle. Chaque page peut contenir plusieurs objets.

4-A-11 - Toupie ou "SpinButton"

Ce contrôle est double, il comporte deux boutons, l'un en haut et l'autre en bas.

Page 25: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 25 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Grossis exagérément, on distingue bien ces deux parties.

Les deux évènements les plus intéressantes de ce contrôle sont SinUp et SpinDown. Ils se produisent lorsquel'utilisateur clique respectivement sur la partie du haut ou la partie du bas du contrôle.Accouplé à un autre contôle, on peut utiliser ce SpinButton pour modifier le contenu du contrôle par incrémentationou décrémentation.

Private Sub SpinButton1_SpinDown()'IncrémentationMe.TextBox1 = Me.TextBox1 - 1End Sub'***********************************Private Sub SpinButton1_SpinUp()'DécrémentationMe.TextBox1 = Me.TextBox1 + 1End Sub

4-A-12 - Image

Ce contrôle permet l'affichage d'une image sur votre UserForm. Cette image peut être chargée au début ou en coursd'éxécution. Pour afficher une image dès le départ, il suffit de modifier la propriété.

Ou encore au travers de votre code.

Me.Image1.Picture = LoadPicture("c:\temp\b.jpg")

4-B - Les évènements

Une des principaux avantages des UserForms est la gestion des évènements. Les évènements sont en généraldéclenchés par l'utilisateur.Ci dessous la liste des évènements pouvant étre déclanchés sur les différens objets d'un UserFom.

Page 26: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 26 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

IntituléZonede

texte

Zonede

listemodifiable

Zonede

liste

Caseà

cocher

Boutond'option

Boutonbascule

LabelTextBoxComboBoxListBoxChekBoxOptionButtonToggleButton

Activate X AddControl AfterUpdate X X X X X XBeforDragOverX X X X X X XBeforeDragOrPasteX X X X X X XBeforUpdate X X X X X XChange X X X X X XClick X X X X X XDblClickX X X X X X XDropButtonClick X X X Enter X X X X X XError X X X X X X XExit X X X X X XKeyDown X X X X X XKeyPressed X X X X X XKeyUp X X X X X XLayout MouseDownX X X X X X XMouseMoveX X X X X X XMouseUpX X X X X X XRemoveControl Scroll SpinDown SpinUp Zoom

Page 27: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 27 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

CadreBoutonde

commande

ContrôleOnglet

Barrede

défilement

ToupieImage FrameCommandButtonTabStripScrollBarSpinButtonImage

Activate AddControlX AfterUpdate X X BeforDragOverX X X X X XBeforeDragOrPasteX X X X X XBeforUpdate X X Change X X Click X X X X XDblClick X X X XDropButtonClick Enter X X X X X Error X X X X X XExit X X X X KeyDownX X X X X KeyPressedX X X X X KeyUp X X X X X Layout X MouseDownX X X XMouseMoveX X X XMouseUpX X X XRemoveControlX Scroll X X SpinDown SpinUp Zoom X

Si tous les objets appartenant à un UserForm réagissent aux évènement, le UserForm réagit aussi à certainsévènements.

Page 28: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 28 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

UserFormActivate

AddontrolBeforDragOver

BeforeDropOrPasteClick

DblClickDeactivate

ErrorInitialize

KeyDownKeyPressed

KeyUpLayout

MouseDownMouseMove

MouseUpQueryClose

RemoveControlResizeScroll

TerminateZoom

4-C - Les propriétés

Le UserForm et ses contrôles possèdent des propriétés comme la couleur de fond, la couleur du texte, le texte pardéfaut, la taille, ...Ces propriétés peuvent être définiess lors de la création de vos objets, mais également par le code.

4-E - Mise en ordre des contrôles

Lorsque vous déposez des contrôles sur votre UserForm, l'ordre dans lequel ils seront parcourus à l'aide du claviercorrespond à l'ordre avec lequel vous les avez déposé. VBE est doté d'un outil permettant de modifier l'ordre de"tabulation" (Tab Stop Order).

4-F - La pratique

Nous allons ajouter un UserForm à un modèle et sera affiché lors de la création d'un nouveau document basé surce modèle.

Première étape, la création d'un document basé sur un document vierge.

Page 29: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 29 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Nous obtenons un document vierge. Lors de la sauvegarde, nous allons choisir "Modèle Word prenant en charge lesmacros (*.dotm)". Si vous optez pour un *.dotx, les macros ne pourront pas être sauvegardées dans le modèle.

Page 30: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 30 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Le modèle doit être sauvegardé avec vos autres modèles de document. Si ce n'est pas lecas, il ne sera pas disponible par la commande Fichier => Nouveau => Mes modèles.

Page 31: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 31 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

L'étape suivant est l'ajout du UserForm et le code qui va permettre de l'afficher.

Nous allons ouvrir le VBE (Visual Basic Editor) avec la conbinaison de touches Alt + F11. Dans la fenêtre d'explorationde projet, nous avons tous les projets en cours. Dans notre cas, juste deux projets, le normal qui est présent pardéfaut et le projet lié à notre modèle. Un double clic sur "ThisDocument" va ouvrir la fenêtre "Code".

C'est dans cette fenêtre que nous allons saisir le code de notre projet. Le code est arrangé par "Module". Le moduleprincipal étant le module "ThisDocument".

Nous allons maintenant avant de saisir du code ajouter un UserForm à notre projet : Insertion => UserForm.

Le résultat, nous le connaissons.

Page 32: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 32 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Après avoir ajouté le Userform, nous allons lui donner un autre nom que "UserForm1". Pour y parvenir, nous allonsmodifier les propriétés des notre Form. Par défaut, la fenêtre des propriétés est affichée, si ce n'est pas le cas,l'utilisation de la touche F4 affichera ce volet.

Page 33: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 33 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Remplaçons le UserForm1 par Accueil pour les propriétés Name et Caption. La propriété Name est le nom de l'objet,c'est ce nom que nous utilisons pour référencer l'objet dans notre code et la propriété Caption est le texte qui figuredans la barre de titre de notre formulaire, ce titre est à l'attention des utilisateurs.

Nous allons maintenant ajouter un morceau de code à notre document pour que le UserForm soit affiché lors de lacréation d'un document basé sur ce modèle. Pour y parvenir, nous allons utiliser l'évènement New() du modèle.Dans le VBE, double-cliquons sur ThisDocument du modèle pour ouvrir le module lié à notre document.Pour ajouter un code s'exécutant sur un évènement de notre document, nous allons utiliser une fonctionnalité de VBE.Dans la partie suppérieur de la fenêtre de code, nous avons deux "déroulants", le premier permet de choisir les objetset le second les évènements liés à l'objet choisi.

Nous obtenons deux lignes de codes :

Private Sub Document_New()

Page 34: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 34 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

End Sub

Nous aurions pu écrire ces lignes, mais l'utilisation des outils mis à notre disposition permet d'éviter les erreurs desaisie.

Pour afficher notre UserForm, c'est très simple, nous allon simplement ajouter Accueil.Show dans notre porcédure.

Private Sub Document_New() Accueil.ShowEnd Sub

VBE est doté d'un outil IntelliSense, cet outil vous aide lors de la saisie de votre code en vous proposant les méthodeset propriétés des objets. Dans notre cas lors de la saisie, la méthode Show nous est proposée.

Si vous sauvegardez le modèle et que vous créez un nouveau document basé sur ce modèle, un UserForm videsera affiché. Comme il ne contient rien, vous devez le fermer avec la croix du coin suppérieur droit.

Dans cet état, ce UserForm ne nous est d'aucun intérêt. Pour qu'il soit "utile", il doit comporter au moins un bouton etcontrôle. Ajoutons une zone de texte, une étiquette et un bouton. Comme pour le UserForm, nous pouvons changercertaines propriétés de nos contrôle.

Je vous conseille de donner à vos contrôles des noms autres que les noms donnés pardéfaut. Comment faire lorsque le UserForm comporte 25 zones de texte nommées deTextBox1 à TextBox25.

L'étiquette va servir à donner des indications sur les fonctions des contrôles aux utilisateurs.

Pour éviter que l'étiquette ne soit séparée de son contrôle, VBE nous donne la possibilité de grouper les contrôles.C'est ce que nous allons faire. À l'aide de la souris et de la touche Ctrl du clavier, nous sélectionnons les deuxcontrôles.

Page 35: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 35 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Ensuite, par le menu Format et Grouper, nos pouvons grouper ces deux contrôles.

Nous obtenons un groupe de deux contrôles.Modifions maintenant le contenu de l'étiquette, le nom a peu d'importance, mais peut être changé à votre convenance.

Page 36: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 36 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Même après avoir été groupes, les contrôles restent accessibles individuellement.

Passons maintenant à notre bouton de commande, changeons trois choses, le nom (Name), le texte affiché (Caption)et la propriété activé (Enabled). Pour le nom, comme c'est un bouton de commande, il est recommandé de faireprécéder le nom de "cmd", de cette manière, nous savons que nous avons affaire à un bouton de commande. Letexte affiché dans le bouton doit donner une indication aux utilisateurs.

Descriptif des conventions typographiques du code Visual Basic

Nous avons mis la propriété Enabled du bouton à False, ce qui rend ce bouton inactif. Pour rendre ce bouton actif,nous allons utiliser un peu de code, il ne deviendra actif qu'après avoir effectué une saisie dans la zone de texte.La méthode lap lus facile pour ajouter du texte à un contrôle est de double cliquer sur le contôle, la fenêtre de codeapparaît avec un procédure lié à ce contrôle. Si vous double cliquez sur la zone de texte, vous obtenez ceci :

Page 37: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 37 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Ajoutons une ligne de code permettant l'activation du bouton de commande

Page 38: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 38 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Private Sub txtEntree_Change()Me.cmdFini.Enabled = True

End Sub

Un réflexe que vous devez acquérir est l'ajout de commentaire dans votre code, ils vous seront très utiles.

Private Sub txtEntree_Change()'Activation du bouton de commandeMe.cmdFini.Enabled = True

End Sub

Testons notre UserForm, il n'est pas nécessaire de passer par la création d'un nouveau document pour afficher leUserForm, on peut l'exécuter au départ du VBE.Vous affichez le formulaire et en cliquant sur le bouton Exécuter ou la touche F5.Dès que vous aurez commencé une saisie dans le zone de texte, le bouton deviendra actif.

Page 39: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 39 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Pour l'instant, un clic sur le bouton ne produit aucune action, nous allons éditer le bouton.Pour fermer le UserForm, vous devez cliquer sur la croix dans le coin supérieur droit du UserForm.

Pour revenir à la fenêtre de code, il suffit de cliquer dans l'éditeur sur le bouton code.

Dans la liste de gauche, nous allons choisir notre bouton cmdFini. Tous les objets de notre UserForm sont disponiblesdans cette liste. Une nouvelle procédure est ajoutée à notre projet.

Private Sub cmdFini_Click()

End Sub

Page 40: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 40 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Nous nous contenterons de fermer le formulaire.

Private Sub cmdFini_Click()'Fermeture du UserFormAccueil.Hide

End Sub

Si nous exécutons notre formulaire, après avoir saisi des données dans la zone de texte, une action sur le boutonpermet de fermer le formulaire.

Les contrôles peuvent avoir une interaction entre-eux sur les données, nous allons ajouter trois contrôles TextBoxsupplémentaires à notre UserForm. Deux pour introduire des données et le troisième pour afficher un résultat.

Pour nommer vos contrôles, c'est assez logique, le premier contrôle va recevoir le premier nombre, je l'ai donc appelétxtNbr1 et par analogie, le second est txtNbr2, le dernier va recevoir le résultat de la somme des deux premiers,je l'ai donc appelé txtResult.

Même si ça ne pose en général pas de problème, évitez d'utiliser les lettres accentuéesdans le nom de vos contrôles.

Page 41: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 41 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Ajoutons du code pour obtenir le résultat. Avec deux contrôles, il est préférable de mettre du code sur les deuxcontrôles. Si nous ne mettons du code que sur un des deux contrôles, nous n'aurons un resultat qu'après la saisiedans ce contrôle.Nous allons donc ajouter du code aux deux contrôles.

Private Sub txtNbr1_Change()'Obtenir la sommeMe.txtResult = Me.txtNbr1 + Me.txtNbr2End Sub

Private Sub txtNbr2_Change()'Obtenir la sommeMe.txtResult = Me.txtNbr1 + Me.txtNbr2End Sub

Dans l'état actuel de votre UserForm, ce n'est pas une addition mais une concaténation qui se produit. Pour pouvoirfaire une addition, nous avons besoin de nombres, VBA dispose d'outils de conversion qui permettent de convertirdes "chaînes" en nombre pour autant que ce soit possible.

Private Sub txtNbr1_Change()'Obtenir la sommeMe.txtResult = CDbl(Me.txtNbr1) + CDbl(Me.txtNbr2)End Sub

Les choses n'étant pas simple, si nous utilisons ce code sans aucun autre changement, nous obtenons une erreur decompatibilité de type. En effet, le TextBox txtNbr2 est vide et ce n'est pas compatible avec une fonction de conversion.Une des solutions est de mettre une valeur par défaut au contrôle et dans le cas d'une addition, le 0 est neutre, nousallons modifier la propriété Value de notre contrôle en lui mettant 0 comme valeur.

Page 42: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 42 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Cette action doit être répétée pour le second contrôle.Cette fois, c'est bien une addition que nous obtenons.

Page 43: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 43 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Puisque nous travaillons avec des nombres, nous allons utiliser un contrôle particulier : la Toupie (SpinButton).L'utilisation de ce contrôle va nous permettre d'incrémenter ou de décrémenter nos nombres.Vous pouvez les disposer n'importe où sur votre formulaire, il est plus logique de les déposer près du contrôle quisera influencé par son action.

Cette toupie réagit aux évènements que nous allons exploiter.Deux évènements nous intéressent, SpinUp et SpinDown qui correspondent à un clic sur le bouton du dessus ousur le bouton du dessous.

Une action sur le haut de ce bouton va incrémenter d'une unité la valeur contenue dans notre txtNbr1.

Private Sub SpinButton1_SpinUp()'incrémentation de la valeur de txtNbr1 de une unitéMe.txtNbr1 = Me.txtNbr1 + 1

End Sub

Une action sur le bas du bouton va décrémenter d'une unité la valeur contenue dans notre txtNbr1.

Page 44: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 44 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

Private Sub SpinButton1_SpinDown()'décrémentation de la valeur de txtNbr1 de une unitéMe.txtNbr1 = Me.txtNbr1 - 1

End Sub

En plus de modifier la valeur contenue dans notre TextBox, l'évènement Change du TextBox est déclenché, ce quimet à jour le résultat dans txtEntree.

4-F-1 - Un UserForm pour afficher les propriétés du document

Lançons nous dans la réalisation d'un formulaire pour afficher les propriétés du document et en ajouter.

4-G - Les contrôles ActiveX

En plus des contrôles standards, les UserForms peuvent recevroides contrôles ActiveX. Ces contrôles sontutilisables par toutes les applications prenant en charge le VBA. Le plus connu est le contrôle calendrier.

Pour ajouter des contrôles supplémentaires, allez dans le menu Outils => Contrôles supplémentaires.

Dans la liste des contrôles, cherchez Microsoft Date and Time picker.

Vous obtenez un nouveau contrôle dans votre boîte à outils.

Page 45: par Olivier Lebeau (Heureux-oli sur DVP)heureuxoli.ftp-developpez.com/office/word/userform/... · 2010. 9. 30. · informations dans ce tutoriel. Pour adresser du texte dans un document,

Interaction entre l'utilisateur et le document par Olivier Lebeau (Heureux-oli sur DVP)

- 45 -Copyright 2010 - Olivier Lebeau. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes,documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 Ede dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.

http://heureuxoli.developpez.com/office/word/userform/

La méthode pour l'insérer ne diffère pas des autres contrôles.

5 - Remerciements