Dans un document Word, une liste déroulante, par exemple une listes comme "OUI", "NON", "Je ne sais pas".
Lorsque l'on sélectionne une valeur, comment faire pour que cette dernière prenne une couleur particulière ?
Le "OUI" serait vert, le "NON" serait rouge, et enfin le "Je ne sais pas" serait noir.
Les champs de formulaire
Utilisation : Contrôles de formulaire hérité
On va créer cette macro qui se déclenchera automatiquement à la sortie du contrôle de formulaire.
Sub couleurs()
ld = Selection.FormFields(1).DropDown.Value
ActiveDocument.Unprotect
Select Case ld
Case 1
Selection.Font.Color = wdColorGreen
Case 2
Selection.Font.Color = wdColorRed
Case 3
Selection.Font.Color = wdColorBlack
End Select
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End Sub
Pour que la macro se déclenche :
- Double-cliquez sur chaque liste déroulante
- Sous la rubrique Exécuter la macro, sélectionnez la macro en question dans la liste déroulante A la sortie.
Les contrôles de contenu
Utilisation : Contrôles de contenu de liste déroulante
Copiez cette macro et collez-la dans ThisDocument et non pas dans un module quelconque.
Private Sub document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
couleur = ContentControl.Range.Font.Color
Select Case ContentControl.Range.Text
Case "oui"
ContentControl.Range.Font.Color = wdColorGreen
Case "non"
ContentControl.Range.Font.Color = wdColorRed
Case "je sais pas"
ContentControl.Range.Font.Color = wdColorBlack
End Select
End Sub
Cette macro sera activée pour n'importe quelle liste de votre document. Si votre document comporte plusieurs listes et que vous souhaitez qu'une seule liste soit affectée par cette macro, il faut déterminer quelle est cette liste soit :
- par son titre (Title)
- par sa balise (Tag)
- par son ID.
L' ID est unique et restera toujours le même. Pour connaître l'ID, copiez et collez la macro suivante dans un module normal. Sélectionnez ensuite votre liste déroulante, lancez cette petite macro et notez le résultat. Vous pourrez supprimer la macro ensuite :
Sub test()
MsgBox Selection.ContentControls(1).ID
End Sub
Modifiez maintenant la première macro en ajoutant une condition sur l'ID et en remplaçant 0000000000# par le résultat de la macro précédente :
Private Sub document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
If ContentControl.ID = 0000000000# Then
couleur = ContentControl.Range.Font.Color
Select Case ContentControl.Range.Text
Case "oui"
ContentControl.Range.Font.Color = wdColorGreen
Case "non"
ContentControl.Range.Font.Color = wdColorRed
Case "je sais pas"
ContentControl.Range.Font.Color = wdColorBlack
End Select
End If
End Sub