Macro pour modifier la couleur de certains mots
Bonjour à tous !
Avant de commencer, je dois préciser que mon besoin concerne Word... J'ai vu par ci par là sur le forum qu'il pouvait arriver que des questions concernant Word soient posées, j'ai donc osé ! Mais dites moi si je suis hors sujet !
Ceci étant dit, voilà mon soucis :
J'ai un document avec quelques mots en orange dont j'aimerais changer la couleur avec une boite de dialogue. En gros, je clique sur le bouton qui lance ma macro, une fenêtre s'ouvre m'invitant à saisir mon code hexa de couleur et paf, les mots orange se transforme en mots bleus (si c'est Christophe qui demande par exemple).
Jusqu'ici j'ai plus ou moins réussi avec ce code là :
Sub test()
Dim strCouleur As Long
' Si une sélection est faite, ne fonctionne que sur celle-ci !
strCouleur = hexa_color(InputBox("Code hexa de la couleur (ex : #FF0000)", "Nouvelle couleur")) ' !!! la saisie utilisateur n'est pas vérifiée !
Selection.Find.ClearFormatting
Selection.Find.Font.Color = RGB(255, 108, 57) ' Orange
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Color = strCouleur
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Function hexa_color(ByVal hexa) 'Returns -1 in case of error
If Len(hexa) = 7 Then hexa = Mid(hexa, 2, 6) 'If color with #
If Len(hexa) = 6 Then
num_array = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")
char1 = LCase(Mid(hexa, 1, 1))
char2 = LCase(Mid(hexa, 2, 1))
char3 = LCase(Mid(hexa, 3, 1))
char4 = LCase(Mid(hexa, 4, 1))
char5 = LCase(Mid(hexa, 5, 1))
char6 = LCase(Mid(hexa, 6, 1))
For i = 0 To 15
If (char1 = num_array(i)) Then position1 = i
If (char2 = num_array(i)) Then position2 = i
If (char3 = num_array(i)) Then position3 = i
If (char4 = num_array(i)) Then position4 = i
If (char5 = num_array(i)) Then position5 = i
If (char6 = num_array(i)) Then position6 = i
Next
If IsEmpty(position1) Or IsEmpty(position2) Or IsEmpty(position3) Or IsEmpty(position4) Or IsEmpty(position5) Or IsEmpty(position6) Then
hexa_color = -1
Else
hexa_color = RGB(position1 * 16 + position2, position3 * 16 + position4, position5 * 16 + position6)
End If
Else
hexa_color = -1
End If
End Function
Mais 3 soucis se posent :
1/La modif de couleur ne s'opère que dans le texte "normal" on va dire. Or j'ai des mots orange dans mon en-tête, dans un tableau, dans une forme...
2/Même à l'intérieur du texte "normal", la modif ne s'opère qu'après mon curseur.
3/ Histoire de rendre le truc plus simple, j'ai une bordure de tableau et des puces dont la couleur doit aussi changer...
Bref, j'ai un début de commencement de quelque chose, mais je suis encore loin. J'imaginais qu'une solution pouvait être de changer le style via la macro, mais je sais pas faire (oui parce que le code du haut, faut pas rêver, c'est pas de moi hein...).
Merci beaucoup par avance pour votre aide, même si on est pas sur Excel, je vous en serais d'autant plus reconnaissant.