Excel VBA - Mettre des mots en rouge dans des cellules

Fermé
Matchevall - 19 nov. 2012 à 14:14
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 19 nov. 2012 à 17:06
Bonjour à tous,

Je suis embété car je ne sais pas vraiment programmer des macros et j'ai une tache qui est répétitive et qui je suis sur pourrait être automatisée.

Pour faire simple : Je travaille sur un glossaire. J'ai deux colonnes A et B, dans la colonne A j'ai des mots et dans la colonne B j'ai leur définition. J'aimerais pouvoir identifier les mots dans les cellules de la colonnes B qui ont déja une définition dans mon glossaire (colonne A).

Petit exemple concret :

Colonne A Colonne B
Arbre Plante qui contient des branches et des feuilles...
Feuille Partie d'une arbre. Se trouvent au bout des branches....
Branche Fait partie d'une arbre. Au bout se trouve des feuilles....

Dans ce cas la macro devrait m'identifier les mots arbre, branche et feuille dans chacune des définitions de la colonne B et mettre ces mots en rouge.

Est-ce possible de programmer ca ?

Merci pour votre aide,

Je vous souhaite une bonne journée !


A voir également:

2 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
19 nov. 2012 à 17:06
Bonjour,

Sub motsCouleur()
    Dim derlig As Long, lig As Long, p As Long
    Dim mots As Variant, ptrMots As Long, c As Range
    Application.ScreenUpdating = False
    ' création dictionnaire
    mots = Application.Transpose(Application.Index(Range("A2", [A65000].End(xlUp)).Value, , 1))

    ' mise en couleur
    derlig = Cells(Rows.Count, 2).End(xlUp).Row
    For Each c In Range("B2", [B65000].End(xlUp))
        c.Font.ColorIndex = xlAutomatic
        For ptrMots = 1 To UBound(mots)
            p = InStr(LCase(c.Value), LCase(mots(ptrMots)))
            Do While p > 0
                With c.Characters(Start:=p, Length:=Len(mots(ptrMots)))
                    .Font.ColorIndex = 3
                End With
                p = InStr(p + Len(mots(ptrMots)), c, ptrMots, vbTextCompare)
            Loop
        Next ptrMots
    Next c
    Application.ScreenUpdating = False
End Sub 

Si tu as beaucoup de mots ça peut prendre un peu de temps...

https://www.cjoint.com/?BKtrgs80x99

eric
1
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
19 nov. 2012 à 14:24
Tu dois pouvoir bricoler un truc avec des formules texte non ?
-1
Oui j'ai esayé de bricoler quelquechose avec la fonction "replace" et deux boucles mais ca ne fonctionne pas...
Honnetement je ne suis même pas sur que ce soit possible !
0