Macro VBA Répéter action jusqu'à atteindre fin document

Apprenti-InformatiChien Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
JCB40 Messages postés 3063 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,
Comment répéter en boucle la macro suivante avec comme condition d'arrêt l'atteinte de la fin du document ? Je ne maîtrise pas bien la fonction Loop Until. Voici mon code :

Sub NotesdeFin_MiseEnForme()
'
' NotesdeFin_MiseEnForme Macro
' Ajout crochets autour numéro liste notes de fin

'
    Selection.TypeText Text:="["
    Selection.MoveRight Unit:=wdWord, Count:=1
    Selection.TypeText Text:="]"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.TypeText Text:=" "
    Selection.MoveDown Unit:=wdParagraph, Count:=1

Loop Until

End Sub

Résultat, cette mise en forme :
61. Voir note

est reformatée ainsi avec les crochets autour du numéro :

[62]. Mozart, Briefe..., op. cit., lettre du 18 janvier 1775 : I, p. 517 (I, p. 368).

D'avance, merci pour votre aide !

JulienDébutant

Windows / Firefox 152.0

3 réponses

  1. JCB40 Messages postés 3063 Date d'inscription   Statut Membre Dernière intervention   479
     

    jour

    Code à tester

    Sub NotesdeFin_MiseEnForme()
    '
    ' NotesdeFin_MiseEnForme Macro
    ' Ajout crochets autour numéro liste notes de fin
    '
        Dim doc As Document
        Set doc = ActiveDocument
        
        ' Placer le curseur au début du document
        Selection.HomeKey Unit:=wdStory
        
        ' Boucle jusqu'à la fin du document
        Do Until Selection.End = doc.Content.End
            Selection.TypeText Text:="["
            Selection.MoveRight Unit:=wdWord, Count:=1
            Selection.TypeText Text:="]"
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
            Selection.TypeText Text:=" "
            Selection.MoveDown Unit:=wdParagraph, Count:=1
        Loop
    
    End Sub

    0
  2. Apprenti-InformatiChien Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     

    Bonjour,

    Merci pour votre réponse, malheureusement le code proposé ne convient pas car la boucle ne s'arrête jamais ce qui fait ensuite boguer Word. Je ne sais pas encore comment quelle instruction indiquer pour stoper la boucle.

    0
  3. JCB40 Messages postés 3063 Date d'inscription   Statut Membre Dernière intervention   479
     

    code a tester à nouveau

    Sub NotesdeFin_MiseEnForme()
        ' NotesdeFin_MiseEnForme Macro
        ' Ajout crochets autour numéro liste notes de fin
        Dim doc As Document
        Dim rng As Range
        Set doc = ActiveDocument
        Set rng = doc.Content
    
        ' Désactiver le rafraîchissement de l'écran et les alertes pour améliorer les performances
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        
        ' Boucle à travers chaque mot du document
        For i = 1 To rng.Words.Count
            If IsNumeric(rng.Words(i).Text) Then
                ' Ajouter les crochets autour du mot
                rng.Words(i).Text = "[" & rng.Words(i).Text & "]"
            End If
        Next i
    
        ' Réactiver le rafraîchissement de l'écran et les alertes
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End Sub

    0