Changer partiellement la couleur d'un texte dans une cellule

XLTOF

XLDnaute Nouveau
Bonjour a vous !

J'ai une question qui peut paraitre simple en apparence mais qui pour moi reste un obstacle insurmontable pour l'instant. (Vous pourrez donc facilement en déduire mon niveau dans excel ;-)) )

je souhaierai creer une macro qui recherche un mot particulier dans une plage de cellule et qui, lorsque le mot est trouvé, me le change de couleur ou me le passe en bold de façon à ce qu'il saute plus facilement aux yeux.
Pour l'instant via VBA j'arrive bien à lui faire changer la couleur du texte mais pour toute la Cellule... donc finalement cela n'améliore pas la lisibilité du mot cherché.

Avez vous une solution en stock ?

Merci d'avance pour votre aide

A+
 

myDearFriend!

XLDnaute Barbatruc
Re : Changer partiellement la couleur d'un texte dans une cellule

Bonsoir XLTOF,
Bonsoir Guillaumega,

pourquoi VBA? La mise en forme conditionnelle est parfaite pour faire cela non?
Guillaumega, si tu connais la méthode pour faire une mise en forme conditionnelle avec effet partiel dans une cellule, moi je suis preneur...


Dans l'attente, XLTOF tu peux peut-être tester comme ça :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'myDearFriend!  -  www.mdf-xlpages.com[/COLOR]
[COLOR=NAVY]Dim[/COLOR] Plage [COLOR=NAVY]As[/COLOR] Range, Cel [COLOR=NAVY]As[/COLOR] Range
[COLOR=NAVY]Dim[/COLOR] LeMot [COLOR=NAVY]As String[/COLOR], AdrDeb [COLOR=NAVY]As String[/COLOR]

    [COLOR=GREEN]'A adapter -----------------------------------[/COLOR]
    [COLOR=NAVY]Set[/COLOR] Plage = Sheets("Feuil1").Range("A1:D57")
    LeMot = "Mot"
    [COLOR=GREEN]' --------------------------------------------[/COLOR]
    
    [COLOR=NAVY]With[/COLOR] Plage
        [COLOR=NAVY]Set[/COLOR] Cel = .Find(LeMot, LookAt:=xlPart)
        [COLOR=NAVY]If Not[/COLOR] Cel [COLOR=NAVY]Is Nothing Then[/COLOR]
            AdrDeb = Cel.Address
            [COLOR=NAVY]Do[/COLOR]
                Modif Cel, LeMot
                [COLOR=NAVY]Set[/COLOR] Cel = .FindNext(Cel)
            [COLOR=NAVY]Loop While Not[/COLOR] Cel [COLOR=NAVY]Is Nothing[/COLOR] And AdrDeb <> Cel.Address
        [COLOR=NAVY]End If
    End With
End Sub[/COLOR]

[COLOR=NAVY]Private Sub[/COLOR] Modif([COLOR=NAVY]ByRef[/COLOR] Cel [COLOR=NAVY]As[/COLOR] Range, LeMot)
[COLOR=NAVY]Dim[/COLOR] T [COLOR=NAVY]As String
Dim[/COLOR] Pos [COLOR=NAVY]As Integer[/COLOR]
    T = Cel.Text
    [COLOR=NAVY]Do[/COLOR]
        Pos = InStr(Pos + 1, T, LeMot)
        [COLOR=NAVY]If[/COLOR] Pos > 0 [COLOR=NAVY]Then
            With[/COLOR] Cel.Characters(Start:=Pos, Length:=Len(LeMot)).Font
                .FontStyle = "Gras"
                .ColorIndex = 3     [COLOR=GREEN]'rouge[/COLOR]
            [COLOR=NAVY]End With
        End If
    Loop Until[/COLOR] Pos = 0
[COLOR=NAVY]End Sub[/COLOR]
Et si tu ne veux pas que la procédure soit sensible à la casse, tu peux modifier comme ça :
Code:
Pos = InStr(Pos + 1, T, LeMot[B], vbTextCompare[/B])
Cordialement,
 
Dernière édition:

XLTOF

XLDnaute Nouveau
Re : Changer partiellement la couleur d'un texte dans une cellule

Bonjour à vous !
Je ne savais pas qu'il y avait un service de nuit sur Excel Downloads ;-))
Vous ne dormez jamais ?
En tout cas quelle rapidité. C'est mieux que SOS médecins !!! merci à vous !

Je vais tester ta solution MyDearFriend. Je ne connais pas l'instruction Instr.
Si je comprend bien le principe tu charge l'ensemble de la cellule dans une variable string , tu détermines la position du mot dans cette chaine et tu selectionnes ensuite les caractères dans la cellule en fonction de la longueur du mot ?

Je te tiens au courant
Merci encore
A+
 

myDearFriend!

XLDnaute Barbatruc
Re : Changer partiellement la couleur d'un texte dans une cellule

Bonsoir XLTOF,

Je ne savais pas qu'il y avait un service de nuit sur Excel Downloads ;-))
Vous ne dormez jamais ?
En tout cas quelle rapidité. C'est mieux que SOS médecins !!! merci à vous !
Pour ma part, sauf pendant mes congés, je n'ai pas le loisir de me joindre à la fête en journée... alors j'écourte un peu mes nuits pour pouvoir pratiquer, moi aussi, la passion qui nous anime tous un peu ici...

Si je comprend bien le principe tu charge l'ensemble de la cellule dans une variable string , tu détermines la position du mot dans cette chaine et tu selectionnes ensuite les caractères dans la cellule en fonction de la longueur du mot ?
Oui, en gros, c'est à peu près ça :)

Je cherche d'abord les cellules contenants LeMot.
Le texte de chacune d'elles est traité ensuite dans la procédure Modif().
Dans cette procédure, je situe LeMot dans la chaîne de caractères (par sa position de départ et sa longueur effectivement) et je définie ensuite les propriétés d'affichage des caractères correspondants. Je procéde ici dans une boucle (Do...Loop) dans l'hypothèse où LeMot apparaîtrait plusieurs fois dans une même cellule.

Cordialement,
 

XLTOF

XLDnaute Nouveau
Re : Changer partiellement la couleur d'un texte dans une cellule

Salut à vous

J'ai testé ta solution MydearFriend
ça marche très bien.

Bravo pour votre réactivité à tous et encore merci
je pense que je vais trainer très souvent sur ce forum désormais ! ;-))

A bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat