Bonjour,
J'ai une macro à faire pour remplacer dans Word des codes de catégories documentaires par leur intitulé en clair.
C'est du simple remplacement de texte... mais je n'y connais rien en VBA.
Est-il possible de simplifier la macro exemple que j'ai enregistrée ci-dessous.
Car il s'agit des mêmes instructions répétées pour chaque mot à remplacer.
Merci pour votre aide.
----------------
Sub Macro1()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "RO"
.Replacement.Text = "Roman"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "PS"
.Replacement.Text = "Poésie"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "PO"
.Replacement.Text = "Policier"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Sub Macro1()
Dim MyArray As Variant, i As Integer
MyArray = Array("RO", "PS", "PO")
For i = 0 To UBound(MyArray)
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = MyArray(i)
Select Case .Text
Case "RO"
.Replacement.Text = "Roman"
Case "PS"
.Replacement.Text = "Poésie"
Case "PO"
.Replacement.Text = "Policier"
End Select
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Next i
End Sub
Génial !
Je m'aperçois que j'ai eu raison de faire appel à vbfrance car mon code était pas mal relou...
J'ai commencé à faire fonctionner celui avec l'instruction select case, et ça fonctionne.
Je vous en dirais plus dans quelques heures.
Merci loulou69 et bigfish le vrai !
Pour la macro de loulou69, il y a un bog avec l'instruction strReplacedBy.
J'ai modifié la ligne :
Replacement.Text strReplacedBy .Forward True
par :
Replacement.Text strReplacedBy.Forward True
mais le bog persiste.
Je continue de toute façon à travailler avec l'autre code de bigfish, le seul problème rencontré est que j'ai une quarantaine de mots à remplacer et que ça me fait une instruction Array trés longue, mais bon ça fonctionne quand même...
On peut de toute façon clore ce post, j'ai un code qui me satisfait pleinement.
Bye et merci
Bonjour,
si tu as une quarantaine de mot, pourquoi ne pas alors utiliser un dictionnaire ?
Genre (ici exemple avec 3 mots) :
Set mondico = CreateObject("Scripting.Dictionary")
mondico.Add "RO", "Roman"
mondico.Add "PS", "Poésie"
mondico.Add "PO", "Policier"
For Each mot In mondico
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = mot
.Replacement.Text = mondico(mot)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Next
Si tu voulais de surcroît être un peu plus adroit, tu utiliserais un fichier texte pour remplir ton dictionnaire en boucle en lisant ce fichier texte (avantage : une très grande flexibilité car il te suffirait de modifier à ta guise le fichier texte et ton dictionnaire suivrait alors ces modifications).
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Génial tous ces codes ! (je réponds un peu tard...)
Finalement j'ai effectivement utilisé le dernier code avec le dictionnaire.
Pour utiliser un fichier texte, ça correspond pas à mon utilisation car je dois envoyer cette macro à d'autres utilisateurs non informaticiens, si possible avec juste un bouton à cliquer.
La macro serait différente pour chaque utilisateur.
Je travaille dessus.
Merci à tous !