Simplifier une macro Word

Signaler
Messages postés
9
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
9 mars 2017
-
Messages postés
9
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
9 mars 2017
-
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

6 réponses

Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Il faut je pense en plus revenir en début du texte à chaque fois, à toi de voir

Sub Macro1()
Selection.HomeKey Unit:=wdStory
Call ReplaceText("RO","Roman")
Selection.HomeKey Unit:=wdStory
Call ReplaceText("PS","Poésie")
Selection.HomeKey Unit:=wdStory
Call ReplaceText("PO","Policier")

End Sub

Sub ReplaceText(strText as string, strReplacedBy as string)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = strText
.Replacement.Text strReplacedBy .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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

tu peux aussi faire comme ceci:

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


A+
Messages postés
9
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
9 mars 2017

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 !
Messages postés
9
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
9 mars 2017

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
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
Messages postés
9
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
9 mars 2017

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 !