scoobytor
XLDnaute Nouveau
Bonjour à tous,
Je cherche à mettre en évidence un mot dans différentes cellules (je veux colorier que le mot pas la cellule).
J'ai trouvé un code VBA qui marche très bien(merci à l'auteur j'ai laissé son nom dans le code) , mon seul souci est que le mot cherché doit être tapé dans VBA alors que j'aimerais qu'il corresponde au mot contenu dans la cellule B2 de ma feuille TEST.
Je joins un fichier exemple et voici le code VBA:
Sub TestCharacterColor()
Const SheetName As String = "TEST" ' Nom de la feuille où se trouve les textes à mettre en forme
Const RangeAddress As String = "B4:M40" ' Plage de cellules où se trouve les textes à mettre en forme
Const WordList As String = "cheval" ' Liste des mots qui doivent être mis en évidence
'c'est cette partie que je veux changer, il faut que Wordlist soit le mot contenu dans la cellule B2 de ma feuille TEST
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(SheetName).Range(RangeAddress)
CharacterColor rng, WordList
End Sub
Sub CharacterColor(AreaText As Range, TextColoring As String, Optional RGBCode As Long = vbRed, Optional ResetColor As Boolean = True)
' Procédure de mise en évidence des mots dans une plage de cellules
' Author : http://Philippe.Tulliez.be
' Date : 15/12/2015
' Version : 1.1
' Arguments
' AreaText (Range) Plage de cellules à l'intérieure de laquelle les mots seront mis en évidence
' TextColoring (String) Liste des mots séparés par un ';' à mettre en évidence
' [RGBCode] (Numérique) Code (RGB) de la couleur qui mettra les mots en évidence (d:vbRed (rouge))
' [ResetColor] (Boolean) Efface la couleur de la plage AreaTexte (d:True)
Dim Cel As Range, nbWord As Integer, tbl() As String, Start As Integer
If ResetColor Then AreaText.Font.Color = 0 ' Efface la mise en forme précédente
TextColoring = LCase(TextColoring)
tbl = Split(TextColoring, ";")
For Each Cel In AreaText
For nbWord = 0 To UBound(tbl)
Start = InStr(LCase(Cel), tbl(nbWord))
Do While Start
Cel.Characters(Start, Len(tbl(nbWord))).Font.Color = RGBCode
Start = InStr(Start + 1, LCase(Cel), tbl(nbWord))
Loop
Next
Next
End Sub
Apparemment Worlist est une constante et lui mettre Wordlist= Range ("B2").value n'a pas marché.
Merci d'avance pour votre aide.
Je cherche à mettre en évidence un mot dans différentes cellules (je veux colorier que le mot pas la cellule).
J'ai trouvé un code VBA qui marche très bien(merci à l'auteur j'ai laissé son nom dans le code) , mon seul souci est que le mot cherché doit être tapé dans VBA alors que j'aimerais qu'il corresponde au mot contenu dans la cellule B2 de ma feuille TEST.
Je joins un fichier exemple et voici le code VBA:
Sub TestCharacterColor()
Const SheetName As String = "TEST" ' Nom de la feuille où se trouve les textes à mettre en forme
Const RangeAddress As String = "B4:M40" ' Plage de cellules où se trouve les textes à mettre en forme
Const WordList As String = "cheval" ' Liste des mots qui doivent être mis en évidence
'c'est cette partie que je veux changer, il faut que Wordlist soit le mot contenu dans la cellule B2 de ma feuille TEST
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(SheetName).Range(RangeAddress)
CharacterColor rng, WordList
End Sub
Sub CharacterColor(AreaText As Range, TextColoring As String, Optional RGBCode As Long = vbRed, Optional ResetColor As Boolean = True)
' Procédure de mise en évidence des mots dans une plage de cellules
' Author : http://Philippe.Tulliez.be
' Date : 15/12/2015
' Version : 1.1
' Arguments
' AreaText (Range) Plage de cellules à l'intérieure de laquelle les mots seront mis en évidence
' TextColoring (String) Liste des mots séparés par un ';' à mettre en évidence
' [RGBCode] (Numérique) Code (RGB) de la couleur qui mettra les mots en évidence (d:vbRed (rouge))
' [ResetColor] (Boolean) Efface la couleur de la plage AreaTexte (d:True)
Dim Cel As Range, nbWord As Integer, tbl() As String, Start As Integer
If ResetColor Then AreaText.Font.Color = 0 ' Efface la mise en forme précédente
TextColoring = LCase(TextColoring)
tbl = Split(TextColoring, ";")
For Each Cel In AreaText
For nbWord = 0 To UBound(tbl)
Start = InStr(LCase(Cel), tbl(nbWord))
Do While Start
Cel.Characters(Start, Len(tbl(nbWord))).Font.Color = RGBCode
Start = InStr(Start + 1, LCase(Cel), tbl(nbWord))
Loop
Next
Next
End Sub
Apparemment Worlist est une constante et lui mettre Wordlist= Range ("B2").value n'a pas marché.
Merci d'avance pour votre aide.