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 SubEnfin lancer la procédure ou la mettre dans l'événement ThisDocument
Private Sub Document_Open()
Call MajListbox
End SubA+
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
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 SubPour 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