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

JBL07

XLDnaute Occasionnel
Ca marche parfaitement, c'est moi qui n'avait pas su "finaliser"
J'ai créé un bouton pour affecte la macro et calé le code sur la plage désirée

Un grand merci !
Je vais essayer de trouver comment inverser la sélection, car du coup chaque mot passé au rouge reste rouge, même si je le remplace en I8 par autre
 

JBL07

XLDnaute Occasionnel
Trop fort
Merci pour ta solution plus légère !

Moi j'avais créé un second bouton avec ça, c'est moins bien :

Sub Reverse()
Couleur [I9:I796], [I8], 0
End Sub

Par contre, pour les cellules où il y a une mise en forme conditionnelle ( je veux repérer certaines saisies ), la MFC "cache" le rouge de la police des mots visés par la macro... si tu as une solution je suis preneur également
 

job75

XLDnaute Barbatruc
Bonjour JBL07, danielco,
Par contre, pour les cellules où il y a une mise en forme conditionnelle ( je veux repérer certaines saisies ), la MFC "cache" le rouge de la police des mots visés par la macro... si tu as une solution je suis preneur également
Il faudrait nous montrer votre fichier avec la MFC car chez moi (Excel 2019) il n'y a pas de problème, voyez le fichier joint avec la MFC sur la colonne L.

A+
 

Pièces jointes

  • Comptes V exemple(1).xlsm
    73.5 KB · Affichages: 14

job75

XLDnaute Barbatruc
Il y a décalage parce que votre condition de MFC n'est pas bonne.

Vous avez écrit =GAUCHE($I8;2)="Vx" alors qu'il faut =GAUCHE($I9;2)="Vx", fichier (2).
 

Pièces jointes

  • Comptes V exemple(2).xlsm
    73.6 KB · Affichages: 2

job75

XLDnaute Barbatruc
On remarquera que si on entre "Carte" en I8 la macro ne colore pas en rouge à cause de la MFC qui prend le dessus.

Par contre si en I8 on entre "arte" la macro colore ce texte en rouge.
 

JBL07

XLDnaute Occasionnel
Dans mon fichier de base, la Mfc est correcte avec I8, mais se décale vers le haut avec I9, donc il y a une ligne différente qq part
En tout cas, voilà que tout est ok, dans la bonne plage et la macro prend le pas sur la MFC !

Je vous remercie tous les deux !
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…