Lier une plage de données dans une liste déroulante de word

Bonjour à tous,

je souhaiterai dans un champ de type liste déroulante sous word lier une zone nommée ou plage de cellules d'excel.

Merci pour votre aide...

Cordialement,

F. AUDOUY

Bonsoir,

Avec VBA :

Activer l'onglet développeur si besoin :

Excel 2007 : Options de Word/Affichage

Word 2010 : Options de Word/Personnaliser le ruban

Mettre un contrôle de type ListBox nommé ListBox1 sur le document

Ensuite mettre ce code dans un module standard et référencer Excel si besoin (Fenêtre VBE/menu Outils/Références)

' Nécessite  la référence Microsoft Excel xx.x Object Library

Private Sub ListBox1_Click()
    Dim Xl As Excel.Application, Wbk As Excel.Workbook

    Set Xl = CreateObject("Excel.Application")
    Xl.Visible = False
    Set Wbk = Xl.Workbooks.Open("D:\Test\Test.xlsx")

    ' Chargement de la liste
    ' En colonne A, j'ai mis
    ' Ligne 1 = Mois
    ' Ligne 2 = Janvier
    ' Ligne 3 = Février
    ThisDocument.ListBox1.Clear
    With Wbk.Worksheets(1)
    For l = 2 To 13
        ThisDocument.ListBox1.AddItem .Cells(l, "A").Text
    Next l
    End With
    Wbk.Close
    Set Xl = Nothing
End Sub

Enfin lancer la procédure ou la mettre dans l'événement ThisDocument

Private Sub Document_Open()
Call MajListbox
End Sub

A+

Benead

Bonjour et merci pour votre aide.

J'ai un petit soucis pour établir la liaison.

1- J'ai fait ma liste dans un ficher excel comme tu l'as décrit dans ton code ; j'ai créé ce code dans Excel avec le bon chemin.

2- Dans word, j'ai fait référence par Menu VBE/Menu Outils/références à Microsoft Excel 14.0 Object Library

3- Toujours dans word, j'ai inséré un champs de formulaire Liste déroulante que j'ai nommé (zone signet) Listbox1

4- Dans word encore, j'ai ajouté l'évènement suivant :

Private Sub Document_Open()

Call MajListbox

End Sub

5- je protège le formulaire mais pas de champs ...

Avez vous une idée de se que j'oublie ???

En PJ, les deux fichiers...

merci de votre aide par avance

F. AUDOUY

267test.zip (7.45 Ko)

Bonsoir,

C'est normal que cela ne fonctionnait pas car je me suis trompé dans le nom de la procédure mais aussi que dans de doc que tu nous a transmis, il n'y a pas de module standard avec la procédure. Pour compléter le tout, tu n'utilises pas le même contrôle.

Dans le document joint, j'ai un contrôle Zone de liste déroulante (formulaire) nommé "Mois" (Signet).

La procédure suivante est à mettre dans un module standard et à faire une seule fois, sauf si le contenu du classeur Excel Change :

' Nécessite  la référence Microsoft Excel xx.x Object Library

Sub MajListbox()
   Dim Xl As Excel.Application, Wbk As Excel.Workbook

   Set Xl = CreateObject("Excel.Application")
   Xl.Visible = False
   Set Wbk = Xl.Workbooks.Open("D:\Temp\ListeD\Test.xls")
   ThisDocument.FormFields("Mois").DropDown.ListEntries.Clear
   With Wbk.Worksheets(1)
      For l = 2 To 13
         ThisDocument.FormFields("Mois").DropDown.ListEntries.Add .Cells(l, "A").Text
      Next l
   End With
   Wbk.Close
   Set Xl = Nothing
End Sub

(Ne pas oublier de changer le chemin du classeur Excel)

Si la liste doit être actualisée à l'ouverture de Word, il faut mettre l'événement ThisDocument (je l'ai désactivé)

Private Sub Document_Open()
   Call MajListbox
End Sub

Pour terminer, pour que cela fonctionne il faut que la protection soit activée (Onglet Révision/Restreindre la modification/Activer la protection.

A+

Benead

Bonjour et merci pour ce nouveau code.

Je n'arriva pas à le faire marcher ...

1- J'ai changer dans le code le chemin ou se trouve le fichier Liste.xls (voir ci-dessous)

Set Wbk = Xl.Workbooks.Open("H:\Test.xls") 'le fichier est sur ma clé USB

2- Dans word, j'ai protégé le formulaire 'Onglet Développeur>Restreindre la modification>Activer la modification, sans MDP

Et rien dans la liste ...

Une idée ???

Merci d'avance pour votre aide...

F. AUDOUY

Bonjour,

Comme je te l'ai dit dans mon mail précédent, tu utilises un contrôle (une liste déroulante) qui n'a pas besoin d'être rechargé à chaque ouverture du classeur sauf si les données du tableau Excel changent.

Est-ce le cas ?

Oui, il faut réactiver l'événement "Document_Open" en supprimant les apostrophes qui mettent le code en commentaires.

Non, alors il faut exécuter la macro "MajListbox" une seule fois en faisant Alt+F8 puis en lançant la macro de mise à jour de la liste.

A+

Benead

Bonjour,

J'essaye d'implémenter ce code dans un formulaire word mais sans succes. (je ne suis pas un expert VBA)

Mon besoin est de relié 3 liste déroulantes à 3 colonnes d'une feuille excel.

ListeDéroulante1 relié au cellules de Colonne A

ListeDéroulante2 relié au cellules de Colonne B

ListeDéroulante3 relié au cellules de Colonne C

Avant d'arriver à faire cela je bloque déjà sur le code de base :

Mon code ne marche pas qd je modifie dans le code le nom par rapport à mes listes déroulantes (signets en place)

(en effet pas de problème si je transpose la chemin de mon fichier excel dans votre fichier source, mais du moment que je mets votre code sur mon fichier word avec mes signets de liste déroulante ca bug bloque.

Merci d'avance de votre aide

Sub MajListbox()

Dim Xl As Excel.Application, Wbk As Excel.Workbook

Set Xl = CreateObject("Excel.Application")

Xl.Visible = False

Set Wbk = Xl.Workbooks.Open("D:\Temp\ListeD\Test.xls")

ThisDocument.FormFields("Mois").DropDown.ListEntries.Clear

With Wbk.Worksheets(1)

For l = 2 To 13

ThisDocument.FormFields("Mois").DropDown.ListEntries.Add .Cells(l, "A").Text

Next l

End With

Wbk.Close

Set Xl = Nothing

End Sub

107test.zip (9.65 Ko)
107test.xlsx (14.84 Ko)
Rechercher des sujets similaires à "lier plage donnees liste deroulante word"