Bonjour à tous,
J'ai tout d'abord posté ce message dans la section Excel ici où on m'a fait savoir qu'il s'agissait plutôt d'une question de VBA Word, bien que la macro soit utilisée dans Excel donc je me tourne vers vous ...
Je travaille sur un fichier dont l'objectif est de synthétiser des infos contenues dans un dossier contenant une très longue liste de fichiers Word (1500). La chaîne de caractères que je recherche est du format [0-9]{3}-[0-9]{3} ou [0-9]{4}-[0-9]{3}. J'aimerais donc pouvoir récupérer toutes les instances de ces 2 types d'éléments, associées à chaque fois au nom du fichier qui la contient.
Ma macro actuelle marche assez bien, mais ne donne en sortie que la première occurrence de ma chaîne, et recherche uniquement sur [0-9]{3}-[0-9]{3} ou [0-9]{4}-[0-9]{3}, mais pas les deux à la fois.
J'avais donc imaginé une fonction (voir code ci-dessous) qui cherche la prochaine occurrence différente de la précédent, mais je n'arrive pas à la faire marcher (en commentaire dans la macro). Sachant qu'on peut avoir jusqu'à 12 occurrences, ce n'est pas envisageable de créer 12 fonctions. Peut-être une boucle qui cherche dans chaque document avant de passer au suivant, ou la fonction FindNext que je ne maitrise pas ? Je vous serai très reconnaissant de bien vouloir me donner quelques pistes pour faire marcher ma macro
La macro complète est du bricolage, adaptée d'un modèle, donc ce n'est probablement pas optimisé, mais ça marche plus ou moins comme je veux !
En pièce jointe : une archive avec mon fichier Excel et 2 fichiers Word pour l'exemple
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 Formule n+1 (par la fonction FIND) WApp.Selection.HomeKey unit:=6 WApp.Selection.Find.ClearFormatting With WApp.Selection.Find .Text = "[0-9]{4}-[0-9]{3}" .MatchWildcards = True End With Set WSel_a = WApp.Selection WApp.Selection.Find.Execute If WSel_b = WSel_a Then ws.Cells(i, 3) = "" Else: ws.Cells(i, 3) = WSel_a End If
Partager