Macro Word 2003: comment faire un loop? [Résolu]

Signaler
Messages postés
8
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
27 mars 2012
-
Messages postés
8
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
27 mars 2012
-
Salut

Je suis débutant (hyper débutant) en macros.
J'ai une tâche répétitive à réaliser dans word, en fait je dois déplacer des lignes de texte qui commencent toutes par les mêmes caractères. Bref, j'arrive à faire ça au clavier donc j'ai enregistré ma macro avec Word.
Sauf que j'ai ensuite lancé cette macro pour réaliser la tâche, mais ça ne l'a fait que sur une ligne de texte.
Il faudrait que je sache quel code taper afin que la tâche soit reproduite jusqu'à la fin du document (et qu'elle s'arrête alors)...
je sais c'est super basique mais je suis super débutant et j'ai pas trouvé dans l'aide de Word...

je vous copie-colle ma macro actuelle:

Sub InverserSfxEtXv()
'
' InverserSfxEtXv Macro
' Macro enregistrée le 24/03/2012 par L
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "\sfx "
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.Cut
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.PasteAndFormat (wdPasteDefault)
End Sub


J'ai donc besoin de mettre, je pense, un Loop quelque part afin que chaque ligne de mon texte commençant par \sfx soit déplacée comme il faut... mais je sais pas trop comment faire (je me doute qu'il y a d'autres trucs à écrire aussi)
merci beaucoup d'avance!!

4 réponses

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


\sfx 1
xv1
\sfx 2
xv@
saut de ligne

tu auras
xv1
\sfx 1
xv2
\sfx 2

le saut de ligne est necessaire

Sub InverserSfxEtXv()
'Aller à la fin du document
Selection.EndKey Unit:=wdStory


'rechercher en sens inverse
Selection.Find.ClearFormatting
With Selection.Find
.Text = "\sfx "
.Replacement.Text = ""
.Forward = False
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With

'rechercher tant qu'il y a des résultats
Selection.Find.Execute
While InStr(1, Selection.Text, "\sfx ")
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.Cut
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveUp Unit:=wdLine, Count:=2
Selection.Find.Execute
Wend
End Sub
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Le code avec la methode Find peut ne pas fonctionner (d'autres méthodes existe, elles ont toutes des défauts)
En déplacant des lignes vers le bas par Cut puis PasteAndFormat , la commande Selection.Find initialisé peut rencontrer qqs pbs, je suggère de parcourir le document de Bas en haut

Selection.Find.Forward= False

Pour effectuer une boucle sur la methode Find, on peut tester si le retour du find renvoit encore un résultat (boucle While... Wend)


Selection.Find.Execute
While Selection.Text<> ""

....
Selection.Find.Execute
Wend
Messages postés
8
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
27 mars 2012

Cool, merci de ta réponse!
Par contre j'ai pas compris comment intégrer ça dans mon code:

Selection.Find.Execute
While Selection.Text<> ""

....
Selection.Find.Execute
Wend


si à quoi correspondent les points de suspension (je connais rien en Visual Basic)

Merci d'avance
Messages postés
8
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
27 mars 2012

Bon, apparemment ça marche nickel!

merci infiniment
Tu as ma reconnaissance éternelle!