Remplacer si pas en bleu

Le
Roland Miller
Bonjour,

Par VBA je dois faire plusieurs Replace. Ceci dans plusieurs cellules dans =
une plage. Mais j'ai un problème dans certaines situations du texte se=
change une 2ème fois … ce qu'il ne faut pas qu'il se produise=
.

Lorsque je remplace ce texte … je le met en bleu. Y a t'il moyen de=
faire un replace … mais seulement si le texte en question n'est pa=
s bleu ou … selon un autre critère que je pourrais établi=
r?

Merci à l'avance.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Roland Miller
Le #26518874
J'ai essayé avec le code ci-dessous. Dans ma sélection … dans une des cellules j'ai 4 fois le mot allo dont 2 déjà en bleu (couleur #5). Dans cette situation le code ci-dessous ne fonctionne pas. Ça change les 4 allo … et je souhaiterais évidemment que ça ne change pas les 2 allo en bleu. Dans ma sélection …. pour les autres cellules il n'y a que le mot allo dans chacune des cellule s et là ça fonctionne. Les allo en bleu ne se changent pas.
Car le format de la cellule est automatique. Donc j'en conclu que le findFo rmat s'applique au format de la cellule et non au texte à l'intér ieur de la cellule. Y a-t'il un moyen que ça puisse s'appliquer au tex te seulement dans la cellule?
' Establish search criteria.
With Application.FindFormat.Font
'.Name = "Arial"
'.FontStyle = "Regular"
'.ColorIndex = 5
.ColorIndex = xlAutomatic
'.Size = 10
End With
Selection.Replace What:="allo", LookAt:=xlPart, MatchCase:=True, Repl acement:="salut", searchFormat:=True
MichD
Le #26518878
Le 11/06/19 à 09:11, Roland Miller a écrit :
Bonjour,
Par VBA je dois faire plusieurs Replace. Ceci dans plusieurs cellules dans une plage. Mais j'ai un problème dans certaines situations du texte se change une 2ème fois … ce qu'il ne faut pas qu'il se produise.
Lorsque je remplace ce texte … je le met en bleu. Y a t'il moyen de faire un replace … mais seulement si le texte en question n'est pas bleu ou … selon un autre critère que je pourrais établir?
Merci à l'avance.


Bonjour,
Essaie comme ceci :
Adapte le nom de la feuille "Feuil" et la valeur des 2 expressions,
celle à chercher et celle de remplacement, et la plage de cellules où se
fera la recherche.
'----------------------------------
Sub test()
Dim Rg As Range, Trouve As Range, Adr As String
Dim ExpressionR As String, ExpressionC As String
Dim A As Long, B As Long
ExpressionC = "Bozo" 'expression à chercher
ExpressionR = "MichD" 'Expression de remplacement
With Worksheets("Feuil1")
Set Rg = .Range("A1:A10")
End With
With Rg
Set Trouve = .Find(what:=ExpressionC, LookIn:=xlValues, LookAt:=xlPart)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Trouve.Replace ExpressionC, ExpressionR
A = Application.Find(ExpressionR, Trouve.Text, 1)
B = Len(ExpressionR)
Trouve.Characters(A, B + 1).Font.Color = vbBlue
Set Trouve = .Find(what:=ExpressionC, After:=Trouve,
LookIn:=xlValues, LookAt:=xlPart)
Loop Until Trouve Is Nothing
End If
End With
End Sub
'----------------------------------
MichD
Le #26518877
Le 11/06/19 à 10:46, MichD a écrit :
Le 11/06/19 à 09:11, Roland Miller a écrit :
Bonjour,
Par VBA je dois faire plusieurs Replace. Ceci dans plusieurs cellules
dans une plage. Mais j'ai un problème dans certaines situations du
texte se change une 2ème fois … ce qu'il ne faut pas qu'il se produise.
Lorsque je remplace ce texte … je le met en bleu. Y a t'il moyen de
faire un replace … mais seulement si le texte en question n'est pas
bleu ou … selon un autre critère que je pourrais établir?
Merci à l'avance.

Bonjour,
Essaie comme ceci :
Adapte le nom de la feuille "Feuil" et la valeur des 2 expressions,
celle à chercher et celle de remplacement, et la plage de cellules où se
fera la recherche.
'----------------------------------
Sub test()
Dim Rg As Range, Trouve As Range, Adr As String
Dim ExpressionR As String, ExpressionC As String
Dim A As Long, B As Long
ExpressionC = "Bozo" 'expression à chercher
ExpressionR = "MichD" 'Expression de remplacement
With Worksheets("Feuil1")
    Set Rg = .Range("A1:A10")
End With
With Rg
    Set Trouve = .Find(what:=ExpressionC, LookIn:=xlValues,
LookAt:=xlPart)
    If Not Trouve Is Nothing Then
        Adr = Trouve.Address
        Do
            Trouve.Replace ExpressionC, ExpressionR
            A = Application.Find(ExpressionR, Trouve.Text, 1)
            B = Len(ExpressionR)
            Trouve.Characters(A, B + 1).Font.Color = vbBlue
           Set Trouve = .Find(what:=ExpressionC, After:=Trouve,
LookIn:=xlValues, LookAt:=xlPart)
        Loop Until Trouve Is Nothing
    End If
End With
End Sub
'----------------------------------


Si tu préfères, tu peux remplacer cette ligne de code
(le deuxième Set Trouve de la sub....)
Set Trouve = .Find(what:=ExpressionC, After:=Trouve,
LookIn:=xlValues, LookAt:=xlPart)
Par
Set Trouve = .FindNext(Trouve)
MichD
Roland Miller
Le #26519082
Super. Un grand merci.
Publicité
Poster une réponse
Anonyme