OVH Cloud OVH Cloud

macro remplacement de caractères

4 réponses
Avatar
rpapa
salut =E0 tous

j'ai besoin dans une macro de remplacer le caract=E8re & par \& et cela
uniquement si le & est =E9crit en rouge.

lorsque je fais la manip =E0 la main
edition -> remplacer ... en pr=E9cisant que le caract=E8re doit =EAtre
rouge, il ne me remplace que ceux qui sont rouge.

lorsque j'enregistre cette manip, et que je lance la macro, il
substitue alors tous les & m^me ceux qui ne sont pas rouge !!
et effectivement, dans le code enregistr=E9 par la macro je ne vois pas
la propri=E9t=E9 rouge.

pouvez-vous m'indiquer ce qu'il faut ajouter /modifier pour
effectivement limiter la macro de remplacement aux caract=E8res rouges

Merci

ci joint le code de la macro

=3D=3D=3D=3Dcode=3D=3D=3D=3D
Sub tex_remp_carac()
'
' rempt_carac Macro
' Macro enregistr=E9e le 03/05/2006 par papanicola
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text =3D "&"
.Replacement.Text =3D "\&"
.Forward =3D True
.Wrap =3D wdFindContinue
.Format =3D True
.MatchCase =3D False
.MatchWholeWord =3D False
.MatchKashida =3D False
.MatchDiacritics =3D False
.MatchAlefHamza =3D False
.MatchControl =3D False
.MatchWildcards =3D False
.MatchSoundsLike =3D False
.MatchAllWordForms =3D False
End With
Selection.Find.Execute Replace:=3DwdReplaceAll
End Sub
=3D=3D=3Dcode=3D=3D=3D


PS: j'ai trouv=E9 une autre solution mais qui est tr=E8s longue

4 réponses

Avatar
Anacoluthe
Bonjour !

'rpapa' nous a écrit ...
j'ai besoin dans une macro de remplacer le caractère & par & et cela
uniquement si le & est écrit en rouge.
lorsque j'enregistre cette manip, et que je lance la macro, il
substitue alors tous les & m^me ceux qui ne sont pas rouge !!
et effectivement, dans le code enregistré par la macro je ne vois pas
la propriété rouge.


Une des faiblesses de l'enregistreur de macros !!!
L'enregistreur de macro est un excellent outil pour débuter
en vba, mais juste pour débuter ;-)

Il suffit d'ajouter le format cherché et le format remplacé :

ci joint le code de la macro

====code=== Sub tex_remp_carac()
'

' rempt_carac Macro
' Macro enregistrée le 03/05/2006 par papanicola
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "&"
.Font.Color = wdColorRed ' <<<
.Replacement.Text = "&"
.Replacement.Font.Color = wdColorAutomatic ' <<<
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
===code==
Une bonne habitude est de répéter aussi à la fin de la macro

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
car un formatage de Rechercher-Remplacer est conservé
par défaut pour le suivant si bien que l'utilisateur faisant ici
une nouvelle recherche manuelle ne chercherait que du rouge.
L'enregistreur le sait : il place ces précautions au début
de votre macro.

Bonne continuation en vba et bonne journée !

Anacoluthe
« Et l'on cherche souvent plus qu'on ne peut trouver. »
- MOLIERE

Avatar
rpapa
Merci,

je vais essayer ça de suite et vérifier si c'est plus court que ma
suite de test
Avatar
rpapa
ça marche, génial c'est bcp plus rapide que mes tests

d'ailleurs comment mesurer la durée d'execution d'une macro?
Avatar
Anacoluthe
Bonjour !

'rpapa' nous a écrit ...
ça marche, génial c'est bcp plus rapide que mes tests


Hi hi hi vous m'étonnez :-)

VBA est dans l'ensemble un langage escargot mais les routines
internes du RR de Word sont turbo-compressées :-D

d'ailleurs comment mesurer la durée d'execution d'une macro?


On prend le temps système ( TIME pour le plus simple)
au début et à la fin et on fait la différence...

Anacoluthe
« Et l'on cherche souvent plus qu'on ne peut trouver. »
- MOLIERE