Bonjour,
Je dois modifier près de 700 références pour les transformer en notes de bas de page dans un documents de plusieurs centaines de pages. Je me tourne donc vers VBA pour Word où je suis grand débutant. La documentation me semble difficile à obtenir, surtout pour ce qui est des bases (modèle objet, etc.).
Voici toutefois ce que j'ai fait et là où ça coince. Le squelette du code est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
Sub Remplacer_ref_1()
 
' Définition de toutes les variables
' ...
 
Set docRange = ActiveDocument.Range
 
' Définition de la Regex : 
With regEx
   ... ' Définition avec options nécessaires etc. => OK
End With
 
Options.Overtype = False ' Etre sûr d'insérer et pas d'effacer ce qui est déjà écrit
ActiveDocument.TrackRevisions = False ' Sortie du mode suivi des modifications si actif
' Récupération des matchs de la regex :
Set regTrouvees = regEx.Execute(docRange)
 
' Boucle sur les résultats en partant de la dernière (index le plus élevé)
For cpt = regTrouvees.Count To 1 Step -1
    refTexte = regTrouvees(cpt - 1)
    Selection.SetRange Start:=regTrouvees.Item(cpt - 1).FirstIndex, End:=regTrouvees.Item(cpt - 1).FirstIndex
    Selection.Collapse Direction:=wdCollapseStart
    Selection.Footnotes.Add Range:=Selection.Range, Text:=LTrim(refTexte)
Next cpt
 
MsgBox "Nombre occurrences traitées = " & regTrouvees.Count
 
End Sub
L'idée est d'utiliser l'index de chaque occurrence (qui est, si j'ai bien compris, le caractère du début de chaîne matché) pour insérer une note de bas de page à cet endroit précis (j'y mettrai ensuite dedans ce que je veux à l'aide d'un dictionnaire, puis pour terminer j'effacerai ce qui a été trouvé, cette dernière partie ayant été testée et fonctionne sans problème grâce à un Find).
J'ai rapidement rencontré un problème : les numéros de notes de bas de page ne sont pas insérées au bon endroit (en général quelques caractères à quelques dizaines de caractères avant l'endroit où le match a été fait). J'ai pensé que c'était dû au fait qu'en ajoutant les numéros, je décalais le document petit à petit, vu que j'itérais sur la collection via un For Each.
J'ai donc essayé (comme le code le montre), de faire la boucle à rebours en commençant par la fin pour ne pas modifier l'index pour les matchs précédents. (Pour cela, j'ai auparavant écrit les 700 et quelques matchs dans un fichier dans l'ordre où ils étaient trouvés et j'ai constaté qu'ils apparaissaient bien dans l'ordre du texte, donc avec un index croissant...) Hélas, ça ne marche pas. Pour trois notes (texte coupé), ça fonctionne. Mais dès que le nombre de matchs devient important, ça ne fonctionne plus. Sur un essai avec 133 occurrences à trouver, les 57 premières sont OK et les autres KO, a priori sans changement notable dans le texte ou son formatage entre la 57ème et la 58ème occurrence, mais tout ceci à condition que j'enlève le sommaire. Si je ne prends pas cette précaution, ça dérape dès les premiers matchs jusqu'à la fin dès que leur nombre devient important...

Je soupçonne donc que ma sélection initiale ne comprend pas tous les caractères (comment est vu un sommaire en termes d'index ??) et que ça induit à un certain moment un décalage.

Si quelque a des pistes, je suis tout ouïe...
Merci .