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

-  

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

4 réponses

  1. 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
    1. 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
      1. 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
        1. Merci beaucoup pour votre réponse.

          Le code proposé à présent crée en fait deux crochets autour de chaque numéro mais également autour des éventuels numéros présents dans la note :

          [[1]]. Cela est vrai en [[1975]].

          Je pense que pour le moment, je vais garder ma première macro en créant un raccourci pour l'utiliser rapidement.

          Je n'ai pas encore les compétences nécessaires pour créer un code qui me convienne. Je continue à étudier.

          Merci encore pour votre aide !

          0