Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Alimenter toutes les ComboBox d'un document Word

4 réponses
Avatar
nerim63
Bonjour,

Je voudrais alimenter toutes les ComboBox que j'ai placées dans un document
Word (pas dans une form mais directement dans le document) à partir des
plages nommées dans un classeur Excel.

J'utilise le code suivant qui marche bien :

Sub RemplissageStagiaires()
With ThisDocument.ChoixStagiaire ' nom de la ComboBox
.Clear
For Each Cellule In DocExcel.Sheets("Zones de
Liste").Range("ChoixStagiaire") 'la plage Excel porte le même nom que la
comboBox
.AddItem Cellule
Next Cellule
End With
End Sub

mais qui m'oblige à écrire une procédure par ComboBox

Je voudrais écrire une seule procédure qui balaye toutes les comboBox du
document et qui en fonction de leur nom les alimente avec la plage de
cellules correspondante.

mais avec un code du type For each Liste in thisdocument.fields

je n'arrive pas à identifier chaque ComboBox (pas de propriété Name pour
l'objet Field) pour l'associer à la bonne plage

Si quelqu'un peut m'aider....

Merci d'avance

_________________
Cordialement
JC

4 réponses

Avatar
heureux-oli
Bonjour,

Dans la boucle on peut récupérer le nom de la liste déroulante

dim ff as FormField
Dim stName as String
For Each ff in ActiveDocument.FormFields
stName = ff.Name
AppelFocntion(stName)
Next ff

En utilisant judicieusement le nom du FormFields, on peut récupérer les
donnée d'une plage Excel pour les introduire dans la ListEntries.
Reste à définir la fonction par rapport aux besoins

--
Heureux-oli
http://heureuxoli.developpez.com/

----------------------------------------------------------------------------------

"nerim63" a écrit dans le message de
news:
Bonjour,

Je voudrais alimenter toutes les ComboBox que j'ai placées dans un
document
Word (pas dans une form mais directement dans le document) à partir des
plages nommées dans un classeur Excel.

J'utilise le code suivant qui marche bien :

Sub RemplissageStagiaires()
With ThisDocument.ChoixStagiaire ' nom de la ComboBox
.Clear
For Each Cellule In DocExcel.Sheets("Zones de
Liste").Range("ChoixStagiaire") 'la plage Excel porte le même nom que la
comboBox
.AddItem Cellule
Next Cellule
End With
End Sub

mais qui m'oblige à écrire une procédure par ComboBox

Je voudrais écrire une seule procédure qui balaye toutes les comboBox du
document et qui en fonction de leur nom les alimente avec la plage de
cellules correspondante.

mais avec un code du type For each Liste in thisdocument.fields

je n'arrive pas à identifier chaque ComboBox (pas de propriété Name pour
l'objet Field) pour l'associer à la bonne plage

Si quelqu'un peut m'aider....

Merci d'avance

_________________
Cordialement
JC


Avatar
nerim63
Bonjour,

Merci de votre réponse.
Je sais que l'objet Formfield dispose de la propriété Name mais le problème
est qu'une Combobox (outil "Zone de liste déroulante" de la barre d'outils
"boite à outils contrôles" et non outil "Liste déroulante de formulaire" de
la barre d'outils "formulaire") n'est pas un champ de formulaire (FormField)
mais un contrôle de formulaire (Field) et que l'objet Field n'a pas de
propriété Name.

Si on place une liste déroulante dans un UserForm, on peut utiliser la
collection Controls et la propriété Name de l'objet Control. Mais si cette
liste est placée directement dans le document, cela ne marche pas

Or je ne peux pas utiliser de Liste déroulante de formulaire car leur
capacité est limitée à 25 éléments

Remarque : j'utilise Word 2003 et non Word 2007 - Y a-t-il des différences
la dessus

Cordialement

JC


Bonjour,

Dans la boucle on peut récupérer le nom de la liste déroulante

dim ff as FormField
Dim stName as String
For Each ff in ActiveDocument.FormFields
stName = ff.Name
AppelFocntion(stName)
Next ff

En utilisant judicieusement le nom du FormFields, on peut récupérer les
donnée d'une plage Excel pour les introduire dans la ListEntries.
Reste à définir la fonction par rapport aux besoins

--
Heureux-oli
http://heureuxoli.developpez.com/

----------------------------------------------------------------------------------

"nerim63" a écrit dans le message de
news:
Bonjour,

Je voudrais alimenter toutes les ComboBox que j'ai placées dans un
document
Word (pas dans une form mais directement dans le document) à partir des
plages nommées dans un classeur Excel.

J'utilise le code suivant qui marche bien :

Sub RemplissageStagiaires()
With ThisDocument.ChoixStagiaire ' nom de la ComboBox
.Clear
For Each Cellule In DocExcel.Sheets("Zones de
Liste").Range("ChoixStagiaire") 'la plage Excel porte le même nom que la
comboBox
.AddItem Cellule
Next Cellule
End With
End Sub

mais qui m'oblige à écrire une procédure par ComboBox

Je voudrais écrire une seule procédure qui balaye toutes les comboBox du
document et qui en fonction de leur nom les alimente avec la plage de
cellules correspondante.

mais avec un code du type For each Liste in thisdocument.fields

je n'arrive pas à identifier chaque ComboBox (pas de propriété Name pour
l'objet Field) pour l'associer à la bonne plage

Si quelqu'un peut m'aider....

Merci d'avance

_________________
Cordialement
JC







Avatar
nerim63
Re-bonjour

Suite du message précédent

Tous ces contrôles (ComboBox, Cases à cocher, boutons de commandes, Cases
d'option, Toupies...) sont en réalité des contrôles ActiveX

Le problème revient donc à se demander : comment peut lister les contrôles
ActiveX d'un document et accéder à leur noms

Cordialement
JC
Avatar
nerim63
Bonjour

Mon problème est résolu (merci à Wape du forum développez.com)

il faut utiliser la collection InlineShapes :

Dim oCtl As InlineShape

For Each oCtl In ThisDocument.InlineShapes
If TypeName(oCtl.OLEFormat.Object) = "ComboBox" Then
MsgBox oCtl.OLEFormat.Object.Name

End If
Next oCtl

Cordialement
JC