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

  • Initiateur de la discussion Initiateur de la discussion JBL07
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
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
 
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
 
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
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
509
Retour