Dans un document Word, je souhaite avoir une liste déroulante dont le contenu dépend de cases à cocher.
Si la case à cocher A est activée, la liste déroulante doit contenir les données A.
Si la case à cocher B est activée, la liste déroulante doit contenir les données B.
etc.
Cet exemple a été bâti avec des contrôles ActiveX.
Il faut bien entendu une macro que voici, à mettre dans l'éditeur Visual Basic, dans ThisDocument.
On va commencer par créer autant de listes qu'on a de cases à cocher (3 dans mon exemple) :
Sub listeA()
'création liste A
With ComboBox1
.AddItem "choux"
.AddItem "navets"
.AddItem "carottes"
End With
End Sub
Sub listeB()
'Création liste B
With ComboBox1
.AddItem "oranges"
.AddItem "pommes"
.AddItem "cerises"
End With
End Sub
Sub listeC()
'Création liste C
With ComboBox1
.AddItem "chocolat"
.AddItem "guimauve"
.AddItem "bonbons"
End With
End Sub
Une fois toutes les listes créées, on va créer une macro qui se déclenchera lorsque la liste déroulante prendra le focus. Cette dernière se remplira en fonction de l'état des cases à cocher.
Private Sub ComboBox1_GotFocus()
'macro écrite par m@rina
'lorsque la liste déroulante prend le focus
'on commence par la vider
ComboBox1.Clear
'puis on la remplit en fonction des cases à cocher
If CheckBox1.Value = True Then Call listeA
If CheckBox2.Value = True Then Call listeB
If CheckBox3.Value = True Then Call listeC
'si aucune case à cocher n'est cochée, on vide la liste déroulante
If CheckBox1.Value = False And CheckBox2.Value = False And CheckBox3.Value = False Then
ComboBox1.Clear
End If
End Sub