1. Introduction
Vous êtes nombreux à rencontrer des problèmes pour créer, utiliser et gérer des formulaires dans vos documents. Ces opérations ne sont pas compliquées mais nécessitent de la rigueur.
Nous aborderons les contrôles de formulaire sous deux aspects, en mode normal et en VBA.
2. Ajouter des contrôles de formulaire à votre document
Nous allons utiliser les contrôles de formulaire hérités qui sont communs aux versions 2003 et 2007 de Word. Ces contrôles sont faciles à mettre en œuvre.
2-A. Word 2003
Pour insérer des contrôles sous Word 2003, vous devez afficher la barre d'outils Formulaire. Vous pouvez l'activer à l'aide d'un clic droit dans la partie des menus qui ne contient pas de texte.
Dans la liste, choisissez Formulaire.
Vous obtenez une barre d'outils contenant les contrôles de formulaire.
Les outils qui nous intéressent sont au nombre de 5.
Le champ texte
La case à cocher
La liste déroulante
La gomme
Le bouton de protection
2-B. Word 2007
Pour insérer des contrôles de formulaire à votre document, vous devez afficher l'onglet "Développeur".
Si l'onglet "Développeur" n'est pas affiché, vous devez l'activer via les Options de Word.
Bouton Office, Option de Word et cocher : Afficher l'onglet développeur dans le ruban.
Bouton Office, Option de Word et cocher : Afficher l'onglet développeur dans le ruban.
Cet onglet possède dans le groupe contrôle un bouton donnant accès aux contrôles de formulaire, ces contrôles sont qualifiés d'hérités.
En cliquant sur ce bouton vous ouvrez une petite fenêtre contenant les différents contrôles hérités utilisables.
Le champ texte
La case à cocher
La liste déroulante
La gomme
2-C. Le champ Texte
Ce type de champ peut recevoir n'importe quel type de données simples (texte, date, nombre).
Si vous double cliquez sur un champ de formulaire, vous ouvrez la boîte de dialogue relative aux propriétés de ce champ.
La première liste permet le choix du type de donnée que le champ devra contenir.
Si vous choisissez un type "Nombre" et que vous tentez d'introduire une lettre, la donnée est convertie en 0.
Si vous choisissez un type "Nombre" et que vous tentez d'introduire une lettre, la donnée est convertie en 0.
Vous pouvez définir un texte par défaut pour votre champ.
Avec comme résultat :
Vous pouvez également déterminer quelle sera la taille de votre champ ainsi que la casse qui sera utilisée pour afficher le texte.
Les options relatives aux macros permettent de choisir dans la liste des macros du document celle qui pourrait être utilisées lors de la sortie ou entrée du champ.
La dernière partie de la fenêtre est utilisée pour définir le nom du signet utilisé pour le champ (1), si le remplissage du champ (2) est activé (case cochée) ou si la mise à jour des champs (3) doit être effectuée (case cochée).
Vous avez la possibilité de définir un texte pour aider l'utilisateur à la saisie de données dans vos champs (4).
Vous ouvrez alors une boîte de dialogue permettant d'entrer le texte d'aide, il sera affiché selon le cas dans la barre d'état de Word ou sur l'utilisation de la touche "F1".
Vous ouvrez alors une boîte de dialogue permettant d'entrer le texte d'aide, il sera affiché selon le cas dans la barre d'état de Word ou sur l'utilisation de la touche "F1".
Ce qui apparaît dans la barre d'état :
2-D. La Case à cocher
La case à cocher est le contrôle le plus simple, il n'est utilisé qu'avec un seul type de données Oui/Non. Vous pouvez accéder aux propriétés de ce champ de formulaire par double clic sur le contrôle. Les propriétés disponibles sont moins nombreuses.
La première zone de propriétés permet de définir la taille de la case à cocher, elle sera soit automatique (en fonction de la taille de la police), soit avec la taille de votre choix.
Vous avez le choix pour la valeur par défaut de votre contrôle.
Et les propriétés traditionnelles pour l'activation des macros, sur l'entrée ou la sortie du contrôle.
La dernière zone contient les mêmes propriétés que le champ texte.
2-E. La liste déroulante
La liste déroulante permet de choisir dans une liste de valeurs. Ce type de champ permet un meilleur contrôle des données qui seront utilisées. Ces données sont entrées via la boîte de dialogue des propriétés du champ.
La liste est peuplée élément par élément.
Chaque élément est ajouté à la liste par un bouton ou par la touche Entrée, et les éléments sont affichés dans la case de droite.
Les listes déroulantes ont un très gros défaut, le nombre d'éléments qu'elles peuvent contenir ne peut être supérieur à 25.
2-F. Navigation
La navigation entre les différents champs de formulaire peut se faire par la souris ou à l'aide de la touche Tabulation ou Maj Tabulation. Cette navigation n'est possible que si la section est protégée et n'autorise que le remplissage de formulaire.
2-G. Protection du formulaire
Pour que votre formulaire soit utilisable, il est impératif de le protéger. Pour protéger votre formulaire, dans l'onglet Développeur, vous avez un bouton "Protéger un document".
Ce bouton ouvre un volet contenant plusieurs options.
La partie qui nous intéresse est la seconde "Restriction des modifications".
Après avoir coché vous pouvez choisir le type de limitation qui vous souhaitez appliquer à votre document.
Vous devez ensuite activer la protection
Vous pouvez utiliser un mot de passe mais ce n'est pas obligatoire.
Si votre document ne possède qu'une seule section, la restriction sera applicable à l'ensemble du document. |
2-G-1. Protection d'une section
Pour ne verrouiller que la partie de votre document contenant les champs de formulaire, vous devez ajouter un saut de section avant et après vos champs. Ce saut de section doit être continu.
Après avoir ajouté des sections supplémentaires à votre document, vous pouvez choisir les sections auxquelles va s'appliquer la restriction.
Seules les sections sélectionnées auront une restriction de modification, les autres resteront éditables.
3. Passons à la pratique
Nous allons créer un document contenant deux sections, la première contiendra les champs de formulaire et la seconde du texte libre.
La partie formulaire servira à récolter les informations sur le destinataire.
Nous allons en vis-à-vis du texte ajouter les champs de formulaire. Les champs destinés à recueillir les Nom, Prénom, Adresse, Ville, CP et téléphone seront de simple texte. Les informations relatives aux civilités seront des cases à cocher, la date de naissance un champ texte avec limitation sur le contenu et le nombre d'enfants un liste de choix avec 10 possibilités.
Tous les champs de formulaire seront ajoutés à la fin des paragraphes.
Le premier champ contenant le nom sera toujours en majuscule alors que celui du prénom n'aura que la première lettre en majuscule.
Le choix : "Initiale en majuscule" sera plus approprié pour les prénoms composés. |
Pour le champ CP, nous allons limiter la taille du champ à 5 caractères.
Pour les civilités, nous allons utiliser des cases à cocher, une par civilité.
La date de naissance sera entrée dans une zone de texte mais de type date.
Et finalement, le nombre d'enfants sera choisi dans une liste d'éléments.
Nous allons ajouter un saut de section continu à la fin de notre formulaire pour permettre l'utilisation d'un texte libre.
Il ne nous reste qu'à protéger le document et le sauvegarder en tant que modèle de document.
Nous avons maintenant un formulaire que nous pouvons envoyer pour récolter des données.
Nous avons maintenant un formulaire que nous pouvons envoyer pour récolter des données.
Il est possible d'enregistrer les données contenues dans le formulaire sous la forme de texte délimité. Vous devez pour ce faire, modifier une option de Word. |
Le résultat d'une sauvegarde est un fichier txt sous format csv.
Si vous avez prévu du texte libre, il ne sera pas enregistré.
Il est temps de mettre de l'ordre dans notre formulaire. Si le but n'est que le remplissage, les actions suivantes ne sont pas utiles. Si vous souhaitez utiliser du code dans votre formulaire pour automatiser certaines actions ou vérifications, il est important d'utiliser des signets en cohérence avec le texte qui accompagne vos champs.
Dans cette illustration, le nom du signet est "Texte1", ce n'est pas très évocateur du contenu. Comme ce nom sert à identifier un signet contenant un champ de formulaire, nous avons plusieurs solutions, utiliser un préfixe signalant que c'est un champ de formulaire, un signet, un champ texte, ...
L'option que j'ai choisie est le signalement d'un signet, d'un champ texte et de la donnée.
- Nom : bm_txt_Nom
- Prénom : bm_txt_Prenom
- Adresse : bm_txt_Adresse
- Ville CP : bm_txt_CP
- Tel : bm_txt_Tel
- État civil M : bm_boo_M
- État civil C : bm_boo_C
- État civil V : bm_boo_V
- État civil D : bm_boo_D
- Date de Naissance : bm_dte_Naiss
- Nombre d'enfants : bm_txt_Enfant
bm est utilisé pour BookMark |
4. Le VBA
Dans les propriétés, nous avons vu qu'il était possible d'exécuter du code sur l'entrée ou la sortie d'un champ de formulaire. Nous allons utiliser un exemple simple qui va nous permettre dans un premier temps de contrôler que notre code est bien exécuté.
Dans cet exemple, nous allons afficher après saisie le contenu d'un champ dans une boîte de message.
Insérez ce code dans l'éditeur VBE, de préférence dans le module du document.
Dans cet exemple, nous allons afficher après saisie le contenu d'un champ dans une boîte de message.
Insérez ce code dans l'éditeur VBE, de préférence dans le module du document.
|
Dans les propriétés du champ de formulaire, vous avez la possibilité de choisir cette procédure. Nous allons l'insérer pour qu'elle soit exécutée sur l'évènement de sortie du contrôle.
Le principe est assez simple, lorsque vous allez sortir du contrôle, la procédure sera exécutée et le contenu du champ sera affiché dans une boîte de message.
N'oubliez pas d'activer la protection pour pouvoir utiliser les champs de formulaire. |
Si vous avez correctement écrit votre code, vous obtenez ceci lorsque vous entrez une valeur dans le champ.
Vous pouvez, au lieu d'afficher votre saisie dans une boîte de dialogue, effectuer un traitement sur les données introduites.
Nous allons détailler le code utilisé.
Les champs de formulaire font partie de la collection FormFields, pour accéder à un champ de formulaire, nous pouvons utiliser son index ou son nom, le nom étant le nom donné au signet.
Nous allons détailler le code utilisé.
Les champs de formulaire font partie de la collection FormFields, pour accéder à un champ de formulaire, nous pouvons utiliser son index ou son nom, le nom étant le nom donné au signet.
Pour obtenir le contenu du champ, nous utilisons la propriété Result.
Nous pouvons aussi faire une boucle sur les différents champs contenus dans notre document.
|
Le VBA nous permet d'ajouter des valeurs à une liste déroulante.
Ajoutons à un formulaire une liste déroulante qui aura comme nom LD1, nous allons maintenant ajouter des éléments à cette liste avec un petit morceau de code.
Ajoutons à un formulaire une liste déroulante qui aura comme nom LD1, nous allons maintenant ajouter des éléments à cette liste avec un petit morceau de code.
|
Avec comme résultat :
Si nous exécutons le code une seconde fois, les éléments sont à nouveau ajoutés à la liste.
Si nous souhaitons remplir la liste et ne pas y ajouter de nouveaux éléments, il faut la "vider" avant. La méthode Clear permet de vider la liste avant de la remplir.
|
Nous allons réaliser un petit formulaire avec deux listes déroulantes, la première contiendra une liste de trois pays et la seconde une liste contenant 5 villes de ces pays.
Nous allons entrer la liste des pays manuellement.
- Belgique
- France
- Suisse
Les villes seront :
Pays | Villes |
---|---|
Belgique | Bruxelles Charleroi Liège Mons Namur |
France | Avignon Lille Marseille Paris Rennes |
Suisse | Genève Lausanne Montreux Neuchâtel Orbe |
Pour modifier le contenu de la seconde liste, nous allons utiliser le résultat de la première. Nous avons utilisé cette propriété un peu plus haut : "Result". En fonction du résultat obtenu, nous allons remplir la seconde liste en prenant soin de la vider avant.
|
Ce code sera exécuté lors de la sortie du contrôle.
Essayons !
N'oubliez pas de protéger le document en mode remplissage de formulaire.
Essayons !
N'oubliez pas de protéger le document en mode remplissage de formulaire.
Nous avons bien une mise à jour en fonction du choix effectué dans la première liste.
4-A. Effet "Boutons Radio"
Il n'y a pas de "Boutons Radio" prévus pour les contrôles de formulaire. Mais nous pouvons à l'aide de code obtenir le même résultat.
Le fonctionnement des boutons radio est assez simple, lorsqu'une valeur "Vrai" est assignée à un élément, tous les autres éléments du groupe prennent la valeur "Faux". Nous allons donc appliquer ce principe aux cases à cocher utilisées pour les civilités.
Nous allons donner à chaque procédure un nom spécifique, il faut une procédure par case à cocher. Le nom choisi est CAC_X, ou CAC pour Case à Cocher et X pour la civilité traitée. Cette procédure sera utilisée lorsque nous allons sortir du champ.
|
Dans le code ci-dessus, à la sortie de la case à cocher C, si la valeur de cette case est vraie, toutes les autres sont passées en fausse. Pour atteindre la case à cocher voulue, nous utilisons son signet.
5. Références
Nous allons passer en revue quelques références de nos FormFields.
5-A. Protection
Pour pouvoir utiliser un formulaire, il est nécessaire d'activer la protection du document. Dans le même ordre d'idée, il est parfois nécessaire de suspendre la protection pour intervenir sur le document pour ensuite protéger à nouveau ce document.
Pour déprotéger le document, nous allons utiliser la méthode Unprotect du Document
|
La protection est aussi simple, il est cependant nécessaire de spécifier en argument le type de protection que nous allons utiliser.
|
5-B. Propriétés
5-B-1. CalculateOnExit
Cette propriété reçoit comme valeur un Boolean qui spécifie que les champs seront mis à jour lors de la sortie du champ en cours.
Cette mise à jour agit sur tous les champs du document. |
|
Cette propriété est en lecture/écriture
|
On peut très bien envisager de modifier en une seule fois cette propriété pour tous les champs de formulaire d'un document.
|
De cette manière, nous sommes certains de ne pas en avoir oublié un.
5-B-2. CheckBox
Cette propriété n'est pas exploitable directement. Vous pouvez à l'aide de cette propriété savoir si un champ de formulaire est une case à cocher.
|
Si le champ FormFields(3) est bien une case à cocher, la valeur renvoyée est True.
Propriété | Utilisation |
---|---|
Valid | Renvoie True si le champ est une case à cocher |
Default | Définit la valeur par défaut du champ |
Value | Donne une valeur au champ. Ne pas confondre avec Result |
5-B-3. DropDown
Cette propriété est identique à la précédente mais s'applique à une liste déroulante.
C'est cette propriété que nous avons utilisée un peu plus tôt dans cet article pour ajouter des éléments à une liste.
C'est cette propriété que nous avons utilisée un peu plus tôt dans cet article pour ajouter des éléments à une liste.
|
Propriété | Utilisation |
---|---|
Valid | Renvoie True si le champ est une liste déroulante |
ListEntries | Permet d'intervenir sur le contenu de la liste. |
Value | Renvoie l'index de l'item choisi de la liste. Mais permet aussi d'afficher une valeur à la liste |
|
Cet exemple permettra d'afficher le second élément de la liste, qui peut être modifié par l'utilisateur.
5-B-4. Enabled
Cette propriété détermine si le champ est activé ou non, elle se traduit par une case à cocher dans la boîte de dialogue des propriétés du champ.
|
5-B-5. EntryMacro et ExitMacro
Ces propriétés définissent quelle sera la macro qui sera exécutée lors de l'entrée ou de la sortie du contrôle.
Le nom de la macro est passé en argument sous la forme d'une chaîne de caractère.
Le nom de la macro est passé en argument sous la forme d'une chaîne de caractère.
|
5-B-6. HelpText
Cette propriété n'est pas utilisable seule, elle doit être associée à la propriété OnwHelp qui doit être True.
|
Elle permet d'afficher le texte d'aide lorsque l'utilisateur presse la touche F1.
5-B-7. Name
Cette propriété permet de récupérer ou de modifier le nom d'un champ de formulaire.
|
5-B-8. Next et Previous
Ces deux propriétés permettent d'agir respectivement sur le champ précédent ou suivant.
|
5-B-9. OwnHelp
Nous l'avons vu plus haut, cette propriété détermine si le champ possède son propre texte d'aide.
5-B-10. Result
Probablement la propriété la plus intéressante, elle permet de récupérer le contenu de votre champ de formulaire.
|
Comme nous l'avons vu plus tôt, en récupérant le résultat, vous pouvez modifier des choix, créer des champs.
Si vous souhaitez faire du traitement en série de vos formulaires, je vous propose un peu de lecture : un formulaire pour traiter des données
5-B-11. StatusText
Cette propriété contient le texte qui sera affiché dans la barre d'état de Word.
|
5-B-12. Type
Renvoie ou définit le type de champ de formulaire.
|
Le type renvoyé est sous forme numérique.
Valeur | Type | Description |
---|---|---|
71 | wdFieldFormCheckBox | Champ FormCheckBox. |
83 | wdFieldFormDropDown | Champ FormDropDown. |
70 | wdFieldFormTextInput | Champ FormText. |
5-B-13. Count
C'est la plus "célèbre" des propriétés, elle permet de savoir combien d'objets FormFields sont contenus dans la collection.
|
5-B-14. Shaded
Cette propriété est purement esthétique. En fonction de la valeur qui lui est attribuée, les champs de formulaire seront grisés ou non. C'est une question de goût.
|
Cette propriété s'applique à toute la collection, il n'est donc pas possible de mélanger des champs grisés et non grisés sur un même document. |
5-C. Méthodes
5-C-1. Add
La méthode Add permet d'ajouter un élément à la collection des champs de formulaire (FormFields).
Ajoutez dans un document un champ de formulaire Case à cocher. Sur la sortie de ce champ, choisissez la procédure ci-dessous.
Ajoutez un signet "S1" à votre document.
Ajoutez un signet "S1" à votre document.
|
Attention, dans cet exemple, la Case à cocher est le troisième champ de formulaire ! |
Sur sortie, si la case à cocher est cochée, un champ supplémentaire sera ajouté.
5-C-2. Copy et Cut
Permet de couper le champ choisi. Cette méthode ne fonctionne que si le document n'est pas protégé.
|
5-C-3. Delete
Cette méthode va, sans surprise, supprimer le champ de formulaire auquel cette méthode sera appliquée.
|
5-C-4. Select
Cette méthode est l'équivalent de la sélection du champ à l'aide de la souris. Elle renvoie un objet Selection et n'est utilisable que si la protection du document est enlevée, le Select fonctionne, mais on ne peut rien en faire.
|
Aucun commentaire:
Enregistrer un commentaire