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. 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 !

    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

      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.

        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