Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

JBL07

XLDnaute Occasionnel
Merci pour vos réponses

Daniel,

J'ai indiqué la plage ("I9:I796") et le Mot ("I8") successivement dans la première ligne de la macro, puis dans le code, ça n'a pas fonctionné
Peux-tu m'aiguiller stp ?
 

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
 

JBL07

XLDnaute Occasionnel
Mais, il n'y avait pas de reproche !
je ne sais pas ce qu'implique Option Explicite, sinon bien sûr je l'aurais signalé ÔÔ

Ca ne fonctionne point avec ce nouveau code ( j'ai laissé en place la seconde macro Sub Test )
 

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…