Inscription à la newsletter

Tutoriel réalisé avec Word Microsoft 365

Si vous utilisez un formulaire Word composé de listes déroulantes, vous pouvez avoir besoin d’alimenter dynamiquement ces listes à partir d’une liste sur Excel et c’est ce que nous allons voir dans ce tutoriel en utilisant le langage VBA de Word.

 

Présentation des fichiers utilisés

Pour ce tutoriel, je vais me servir du fichier mis à jour que j’avais utilisé lors du tutoriel sur la création de formulaires Word et d’un fichier Excel contenant le nom des classes à l’école primaire. Je vais donc alimenter les listes déroulantes des champs Classe avec cette liste Excel.

Pour pouvoir l’utiliser, il faut avoir accès au fichier Excel et que le chemin soit le même (attention en cas de partage).

 

Définition du nom de la plage Excel

J’ouvre le fichier Excel où se trouvent les listes de classe et je vais placer ces dernières dans une plage de tableau. Pour cela, je me place sur une des cellules de ma liste et je clique sur Tableau Bouton tableau Excel dans le menu Insertion. Je laisse décochée la case Mon tableau comporte des en-têtes puisqu’il n’en contient pas et je m’assure que toute ma plage est comprise (A1 à A5) avant de cliquer sur OK :

Liste des classes de l'école primaire

Sélectionnez ensuite les cellules A2 à A6 et, dans la Zone Nom, donnez-lui le nom Liste_classes avant d’appuyer sur la touche Entrée. De cette manière, votre plage restera dynamique : si vous supprimez ou ajoutez des éléments à la suite, la plage sera automatiquement redimensionnée.

Je ferme le fichier en l’enregistrant.

 

Affichage du menu Développeur de Word

Pour alimenter dynamiquement une liste déroulante dans Word, nous avons besoin de faire appel à du code VBA (Visual Basic for Applications). Pour cela, je vous invite à consulter le tutoriel sur l’affichage du menu Développeur de Word s’il n’apparaît pas sur votre logiciel, puis à ouvrir le formulaire Word ou le document de votre choix.

 

Création des listes déroulantes que nous allons alimenter

Dans ce tutoriel, je vais vous montrer les trois différentes façons de remplir une liste déroulante en utilisant les trois différents contrôles à votre disposition sur Windows. Sur Mac, vous n’aurez accès qu’à la deuxième option (intitulée, sur Mac, Zone de liste modifiable Zone de liste modifiable sur Mac).

En allant dans le menu Développeur, vous avez :

  • Le Contrôle du contenu de zone de liste déroulante Zone de liste déroulante Windows :

Contrôle du contenu de zone de liste déroulante

Je le place en face de la première classe et je clique sur Propriétés Propriétés de liste déroulante sur Word du menu Développeur pour lui donner le Titre Maliste1 avant de cliquer sur OK.

  • La Zone de liste déroulante (Contrôle de formulaire) Zone de liste déroulante pour formulaire et ActiveX en cliquant sur Outils hérités Outils hérités :

Zone de liste déroulante de formulaire

Je le place en face de la deuxième classe et je clique sur Propriétés Propriétés de liste déroulante sur Word (ou sur Options Options de liste déroulante sur Word sur Mac) du menu Développeur pour lui donner le Signet Maliste2 avant de cliquer sur OK.

  • La Zone de liste déroulante (Contrôle ActiveX) Zone de liste déroulante pour formulaire et ActiveX en cliquant sur Outils hérités Outils hérités :

Zone de liste déroulante ActiveX

Je le place en face de la troisième classe et je clique sur Propriétés Propriétés de liste déroulante sur Word du menu Développeur pour lui donner le Nom (Name) Maliste3 avant de fermer la fenêtre.

Les morceaux de code seront quasiment identiques, seules leurs propriétés diffèreront.

 

Alimentation d’une liste déroulante dans Word avec une liste Excel

Je vais vous présenter les différentes méthodes pour alimenter une liste déroulante selon le type de liste déroulante créée sachant que je vais les alimenter à l’ouverture du formulaire, donc du fichier. Attention, si vous avez beaucoup de listes à alimenter avec beaucoup de données, cela peut ralentir son ouverture.

 

Création de la procédure pour l’alimentation des listes déroulantes à l’ouverture du fichier Word

Dans le menu Développeur, cliquez sur Visual Basic Visual Basic VBA. Dans l’Explorateur de projets de la fenêtre VBA (s’il n’apparaît pas, appuyez sur les touches Ctrl + R sur Windows, Ctrl + Cmd + R sur Mac ou allez dans le menu Affichage > Explorateur de projets), faites un double-clic sur ThisDocument du dossier Microsoft Word Objets du projet du fichier (Project suivi du nom du fichier que vous utilisez).

En haut du module qui s’est ouvert, cliquez sur la première liste déroulante (Général) et choisissez Document, puis, dans la deuxième liste, sélectionnez Open : cela crée la procédure Document_Open qui correspond à l’ouverture du fichier. Vous pouvez supprimer la procédure créée précédemment de façon automatique (Document_New).

 

Déclaration et définition des variables communes aux trois types de contrôles Word

Nous allons, maintenant, déclarer les variables qui vont être communes pour les trois méthodes donc, quel que soit celle que vous souhaitez utiliser, déclarez et définissez toutes les variables qui suivent à l’intérieur de la procédure Document_Open :

Dim xlApp As Object
Dim Fichier_Excel As String
Dim Nombre_lignes As Long, L As Long
Fichier_Excel = "C:\Users\Lydia\Desktop\Listes des classes.xlsx"
Set xlApp = GetObject(Fichier_Excel)
Nombre_lignes = xlApp.sheets("Classes").Range("Liste_classes").Rows. Count

La première ligne permet d’instancier un objet qui est désigné, à la ligne 5 comme notre fichier Excel.

À la ligne 2, c’est donc la variable Fichier_Excel qui est déclarée comme textuelle et définie à la ligne 4 comme étant le chemin du fichier. Ici, reprenez, entre guillemets, le chemin complet du fichier où se trouve la liste Excel (répertoire + nom du fichier + extension). Par simplicité, vous pouvez faire un clic droit sur l’icône du fichier en maintenant la touche Maj enfoncée > Copier en tant que chemin d’accès sur Windows ou en maintenant la touche Alt > Copier (nom du fichier) en tant que nom de chemin sur Mac.

Ensuite, nous déclarons la variable Nombre_lignes comme étant numérique et qui correspond, comme indiqué à la ligne 6, à la plage nommée Liste_classes de la feuille nommée Classes du fichier Excel instancié plus tôt. Cette variable nous permet de connaître le nombre de lignes présentes dans la liste Excel.

Enfin, la variable L est également numérique et nous servira pour la suite.

Après ces déclarations, sautez quelques lignes pour laisser de la place pour l’alimentation des lignes et saisissez la ligne suivante :

Set xlApp = Nothing

Celle-ci permet de vider la variable objet instanciée en début de procédure pour libérer de la mémoire.

 

Alimentation d’une liste déroulante d’un contrôle de contenu sur Word (Windows)

À la suite des déclarations de variable et avant le vidage de la variable xlApp, saisissez :

ActiveDocument.SelectContentControlsByTag("Maliste1")(1).DropdownListEntries.Clear
For L = 1 To Nombre_lignes
ActiveDocument.SelectContentControlsByTag("Maliste1")(1).DropdownListEntries.Add xlApp.sheets("Classes").Range("Liste_classes").Cells(L)
Next

La première ligne permet de vider la liste déroulante nommée Maliste1 afin de ne pas avoir de doublons par un ajout des éléments à la suite.

À la deuxième ligne débute une boucle For Next qui se termine à la ligne 4. Celle-ci démarre du numéro 1 jusqu’au nombre de lignes contenues dans la liste Excel, en l’occurrence 5.

À la ligne 3, on alimente la liste nommée Maliste1 avec chaque élément de la plage Excel nommée Liste_classes de la feuille nommée Classes. Comme il s’agit d’une boucle, le processus va se répéter, ici, 5 fois. L sera donc incrémenté à chaque nouvelle itération : ce sera la première ligne de la liste Excel, puis la deuxième, etc. jusqu’à la 5e itération.

 

Alimentation d’une liste déroulante d’un contrôle de formulaire hérité sur Word (Windows et Mac)

Saisissez à la suite ou, si vous n’avez pas saisi le premier bloc de code, après la déclaration des variables :

ActiveDocument.FormFields("Maliste2").DropDown.ListEntries.Clear
For L = 1 To Nombre_lignes
ActiveDocument.FormFields("Maliste2").DropDown.ListEntries.Add xlApp.sheets("Classes").Range("Liste_classes").Cells(L)
Next

Le processus est quasiment similaire, la seule différence se situe à l’appel de la liste puisqu’il s’agit d’un contrôle de formulaire hérité et que cette liste s’appelle Maliste2.

 

Alimentation d’une liste déroulante d’un contrôle ActiveX sur Word (Windows)

Saisissez à la suite ou, si vous n’avez pas saisi les deux premiers blocs de code, après la déclaration des variables :

ActiveDocument.Maliste3.Clear
For L = 1 To Nombre_lignes
ActiveDocument. Maliste3.AddItem xlApp.sheets("Classes").Range("Liste_classes").Cells(L)
Next

Une nouvelle fois, la procédure est quasiment similaire et seule la façon de faire appel à la liste diffère ainsi que son nom Maliste3.

 

Ouverture du fichier pour lancer la macro

Pour tester notre fichier, il ne nous reste plus qu’à le fermer en l’enregistrant puisque la procédure qui contient notre macro est celle qui se lance à l’ouverture. Attention, pensez bien à l’enregistrer dans un fichier prenant en charge les macros (.docm), sinon vous perdrez toute votre macro.

À l’ouverture, les listes avec le contrôle de contenu et le contrôle ActiveX ont été alimentées par le fichier Excel.

Pour vérifier le bon remplissage de la liste du contrôle de formulaire hérité, il faut restreindre la modification comme nous l’avions vu dans le tutoriel sur le formulaire Word.

Sur Windows, aller dans le menu Développeur > Restreindre la modification Restreindre la modification Word. Dans le panneau latéral à droite, à l’étape 2, cochez la case Autoriser uniquement ce type de modification dans le document, puis choisissez, dans la liste déroulante, Remplissage de formulaires et terminez en cliquant sur le bouton Oui, activer la protection (assurez‑vous, pour cela, de ne pas être en Mode Création Mode Création Word dans le menu Développeur). Word vous demande un mot de passe, vous n’êtes pas obligé d’en choisir un, cliquez sur OK et testez votre liste déroulante. Vous pourrez ensuite désactiver la protection en cliquant sur le bouton correspondant au bas du panneau latéral.

Sur Mac, cliquez simplement sur Protéger le formulaire Protéger le formulaire Word du menu Développeur pour activer la protection, puis recliquez dessus pour la désactiver.

Nous avons vu, dans ce tutoriel, que nous pouvions alimenter une liste déroulante sur Word, qu’elle soit un contrôle de contenu, un contrôle de formulaire hérité ou un contrôle ActiveX. Toutefois, n’oubliez pas que si vous n’êtes pas le seul utilisateur du formulaire, le fichier Excel devra pouvoir être à disposition des autres utilisateurs et posséder le même chemin que dans la variable Fichier_Excel.

Notez que si vous n’avez besoin d’alimenter vos listes qu’une seule fois, mais avec beaucoup de données Excel, vous pouvez effectuer cette manipulation, puis supprimer la macro Word une fois que les listes auront été alimentées.

Vous retrouverez les fichiers utilisés dans l’Espace Membres accessible aux abonnés à la newsletter.

Inscription à la newsletter