Microsoft 365 Colorer un mot ou suite de mot défini

JBL07

XLDnaute Occasionnel
Bonjour le Forum,

J'ai trouvé un code qui fonctionne très bien, mais n'arrivant à valider une inscrption sur cet autre forum, je ne peux pas interroger la personne qui l'a communiqué

Il permet, dans une plage, de colorer ( en rouge ) un mot défini dans la seconde partie du code
Ce que je souhaiterais, c'est que le mot puisse être remplacé sans avoir à retourner dans le code, mais à partir d'une cellule de mon tableau ( en l'occurrence I8 )

Voici le code, en 2 parties
J'ai essayé de remplacer dans la seconde macro le "Test" par range("I8").Select, mais bien sûr sans résultat
Peut-être faut-il modifier aussi dans la première le ";") que j'ai colorié en rouge ?

Bref.... j'essaye mais j'ai besoin d'aide !
Merci par avance

Sub CharacterColor(AreaText, TextColoring, Optional RGBCode As Long = vbRed)
Dim Cel As Range, nbWord As Integer, tbl() As String, Start As Integer
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

Sub TestCharacterColor()
Dim rng As Range
Set rng = Range("I9:I796")
rng.Font.Color = 0
CharacterColor rng, "test"
End Sub
 
Solution
Au temps pour moi. il manquait :

VB:
L = 0

La macro devient :

Code:
Sub Couleur(Plage As Range, Mot As Range, Coul As Long)
    'Plage = plage à chercher
    'Mot : adresse de la cellule contenant le mot
    'Coul : Numéro de la couleur
    Dim C As Range, Tabl As Variant, L As Long, Item As Variant
    For Each C In Plage
      L = 0
      If InStr(1, C, Mot) > 0 Then
        For Each Item In Split(C, Mot)
          C.Characters(L + Len(Item) + 1, Len(Mot)).Font.Color = Coul
          L = L + Len(Item) + Len(Mot)
        Next Item
      End If
    Next C
End Sub

Daniel

danielco

XLDnaute Accro
Essaie :

VB:
Sub Couleur(Plage As Range, Mot As Range, Coul As Long)
    'Plage = plage à chercher
    'Mot : adresse de la cellule contenant le mot
    'Coul : Numéro de la couleur
    Dim C As Range, Tabl As Variant, L As Long
    For Each C In Plage
      If InStr(1, C, Mot) > 0 Then
        For Each Item In Split(C.Value, Mot)
          C.Characters(L + Len(Item) + 1, Len(Mot)).Font.Color = Coul
          L = L + Len(Item) + Len(Mot)
        Next Item
      End If
    Next C
End Sub
Sub test()
  Couleur [F5], [A2], 255
End Sub

Plage = plage à chercher
Mot : adresse de la cellule contenant le mot
'Coul : Numéro de la couleur

La macro "test" sert à essayer.

Daniel
 

danielco

XLDnaute Accro
Ce n'est pas ma faute si tu as une ligne "option Explicit" en tête de ton module !

VB:
Sub Couleur(Plage As Range, Mot As Range, Coul As Long)
    'Plage = plage à chercher
    'Mot : adresse de la cellule contenant le mot
    'Coul : Numéro de la couleur
    Dim C As Range, Tabl As Variant, L As Long, Item As Variant
    For Each C In Plage
      If InStr(1, C, Mot) > 0 Then
        For Each Item In Split(C, Mot)
          C.Characters(L + Len(Item) + 1, Len(Mot)).Font.Color = Coul
          L = L + Len(Item) + Len(Mot)
        Next Item
      End If
    Next C
End Sub
 

danielco

XLDnaute Accro
e ne sais pas ce qu'implique Option Explicite, sinon bien sûr je l'aurais signalé

Tu n'y es pour rien. Je ne mets JAMAIS cette option (contrairement à l'avis général). Elle provoque plus d'ennuis qu'elle n'apporte de bénéfices. Elle oblige à déclarer toutes les variables ; et comme "Item" n'était pas déclarée...

Ca ne fonctionne point avec ce nouveau code

Ca fonctionne ici. Est-ce que tu peux passer un classeur exemple ?

Daniel
 

danielco

XLDnaute Accro
Au temps pour moi. il manquait :

VB:
L = 0

La macro devient :

Code:
Sub Couleur(Plage As Range, Mot As Range, Coul As Long)
    'Plage = plage à chercher
    'Mot : adresse de la cellule contenant le mot
    'Coul : Numéro de la couleur
    Dim C As Range, Tabl As Variant, L As Long, Item As Variant
    For Each C In Plage
      L = 0
      If InStr(1, C, Mot) > 0 Then
        For Each Item In Split(C, Mot)
          C.Characters(L + Len(Item) + 1, Len(Mot)).Font.Color = Coul
          L = L + Len(Item) + Len(Mot)
        Next Item
      End If
    Next C
End Sub

Daniel
 

danielco

XLDnaute Accro
Avec ton classeur, j'ai mis "Bleue" en I8 et exécuté la macro sur la plage I15:I17

Annotation 2020-08-25 192456.png


Daniel
 

Pièces jointes

  • Comptes V exemple.xlsm
    94.2 KB · Affichages: 5

Statistiques des forums

Discussions
314 492
Messages
2 110 187
Membres
110 694
dernier inscrit
xaviergilb