Simplifier une macro Word

klod06 Messages postés 9 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 9 mars 2017 - 25 févr. 2010 à 22:27
klod06 Messages postés 9 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 9 mars 2017 - 13 mars 2010 à 19:40
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

cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
26 févr. 2010 à 10:52
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
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
26 févr. 2010 à 12:00
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+
0
klod06 Messages postés 9 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 9 mars 2017
26 févr. 2010 à 19:23
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 !
0
klod06 Messages postés 9 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 9 mars 2017
27 févr. 2010 à 10:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
27 févr. 2010 à 11:20
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
0
klod06 Messages postés 9 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 9 mars 2017
13 mars 2010 à 19:40
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 !
0
Rejoignez-nous