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 liste de la barre d'outils Formulaires( Word 2000/2003), ou contrôles de formulaire hérité (Word 2007 et ultérieur)

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 - Word 2007 et ultérieur

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