Boucle sur ComboBox dans Word

Skud

XLDnaute Junior
Bonjour tout le monde,

Voilà mon problème : J'ai un document word avec une quinzaine de combobox qui ont toutes la même source, mais je suis suceptible d'en ajouter plusieurs autres.
Je souhaite donc faire une boucle sur toutes les ComboBox du document. Dans un userform cela ne me pose pas de problème mais directement dans le document...

Voilà mon code pour le moment :

Code:
Private Sub Document_Open()

On Error Resume Next
Dim i As Byte

For i = 1 To 50

    With Controls("ComboBox" & i)
        .AddItem "1. aaaaaaaaa"
        .AddItem "2. bbbbbbbb"
        .AddItem "3. cccccccc"
        .AddItem "4. ddddddddd"
        .AddItem "5. eeeeeeeee"
        .AddItem "6. fffffffff"
        .AddItem "7. gggggggggg"
        .AddItem "8. hhhhhhhhh"
        .AddItem "9. iiiiiiiiiiii"
        .AddItem "10. jjjjjjjjjjjjjjjj"
        .AddItem "11. kkkkkkkkkkk"
        .AddItem "12. lllllllllllllllll"
        .AddItem "13. mmmmmmmmmmmmmmmmmm"
        .AddItem "14. nnnnnnnnnnnnnn"
        .AddItem "15. oooooooo"
        .AddItem "16. pppppppppp"
    End With
        
Next i

End Sub

Mais lorsque je lance la macro 'Controls' n'est pas reconnu comme dans un userform...

Merci d'avance pour votre aide.
 

PMO2

XLDnaute Accro
Re : Boucle sur ComboBox dans Word

Bonjour,

Voici un exemple avec le code ci-dessous à copier dans un module standard.

Code:
Const COMBOBOX_TYPE As String = "Forms.ComboBox.1"

Sub ConstruireComboBox()
Dim Couleur
Dim i&
Dim j&
Dim S As InlineShape
Dim CB    'As MSForms.ComboBox
Couleur = Array("", vbBlue, vbRed, vbYellow, vbMagenta)
j& = 1
Application.ScreenUpdating = False
For i& = 1 To 7   'pour construire 7 ComboBox
  With Selection
    .WholeStory
    .MoveDown
    .TypeParagraph
    .InsertParagraph
  End With
  Set S = Selection.InlineShapes.AddOLEControl(ClassType:=COMBOBOX_TYPE)
  Set CB = S.OLEFormat.Object
  If j& > 4 Then j& = 1
  CB.BackColor = Couleur(j&)
  j& = j& + 1
Next i&
Application.ScreenUpdating = True
End Sub

Sub AddItemComboBox()
Dim S As InlineShape
Dim CB As MSForms.ComboBox
For Each S In ActiveDocument.InlineShapes
  On Error Resume Next
  If S.OLEFormat.ClassType = COMBOBOX_TYPE Then
    If Err = 0 Then
      Set CB = S.OLEFormat.Object
      With CB
        .AddItem "1. aaaaaaaaa"
        .AddItem "2. bbbbbbbb"
        .AddItem "3. cccccccc"
        .AddItem "4. ddddddddd"
        .AddItem "5. eeeeeeeee"
        .AddItem "6. fffffffff"
        .AddItem "7. gggggggggg"
        .AddItem "8. hhhhhhhhh"
        .AddItem "9. iiiiiiiiiiii"
        .AddItem "10. jjjjjjjjjjjjjjjj"
        .AddItem "11. kkkkkkkkkkk"
        .AddItem "12. lllllllllllllllll"
        .AddItem "13. mmmmmmmmmmmmmmmmmm"
        .AddItem "14. nnnnnnnnnnnnnn"
        .AddItem "15. oooooooo"
        .AddItem "16. pppppppppp"
      End With
    Else
      Err.Clear
    End If
End If
Next S
End Sub

Faites un test sur un nouveau document.
1) lancez la macro ConstruireComboBox qui, comme son nom l’indique, va construire plusieurs ComboBox (voir la ligne For i& = 1 To 7 'pour construire 7 ComboBox).
2) lancez la macro AddItemComboBox qui va y ajouter les différents items.

Cordialement.

PMO
Patrick Morange
 

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet