Selection.Find un nombre quelconque

cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019 - 19 avril 2019 à 10:13
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 25 avril 2019 à 14:37
Bonjour,

Dans un fichier Word de plusieurs milliers de paragraphes, il y en a plusieurs centaines "formatés" ainsi :
<nombre>¶
Par exemple :

ou
59¶
ou encore
1754¶
Je voudrais trouver la syntaxe correcte pour trouver <nombre>¶
Quand je fais :
With Selection.Find
.MatchWildcards = True
.Text = ("[0-9]" & Chr(13))
.Execute
End With
je ne trouve qu'un chiffre devant ¶. Ce qui peut arriver ailleurs que dans les paragraphes recherchés. Comme :
Je vous apporte les 12¶
où mon code sélectionne 2¶, ce qui ne me convient pas.

A votre avis, quel ".Text =" faut-il écrire pour ne trouver que les paragraphes <nombre>¶ ?
Merci de votre aide.

--

3 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
19 avril 2019 à 10:29
Bonjour
Il y a bien longtemps que je n’ai pas fait de VBA, mais je dirais que tu as 2 options:
  • l’operateur like
  • utliser une Regex

0
cs_Apolinaire Messages postés 44 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 25 avril 2019
25 avril 2019 à 11:07
Bonjour,
Je réponds avec un peu de retard, vacances de Pâques obligent...
Merci Whismeril pour ton intervention. Je connaissais "like" mais pas les "RegExp" que tu m'as fait découvrir. Un sacré outil que je n'oublierai pas.
Mais ça ne résout pas mon problème. Avant de poser ma question, je savais trouver mes fameux paragraphes "nombre¶" mais au prix d'un For each para in ActiveDocument.Paragraphs ... Next para. Sur plusieurs milliers de paragraphes, c'est très long en temps. Mon idée était de passer par Selection.Find car cette fonction est quasiment instantanée, même si le texte recherché est très loin dans le document.
Mon souci est donc de trouver une syntaxe adéquate à Selection.Find.Text =
Si on pouvait y mettre une RegExp, ce serait magique. Mais hélas, comme pour Like, les comparaisons doivent se faire une à une et c'est très long. On retombe inexorablement dans un For each para.

En résumé, j'arrive à ce que je veux faire mais je n'arrive pas à améliorer mon code en rapidité.
Tant pis...

--
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
25 avril 2019 à 14:37
Bonjour
Si tu peux charger tout le texte dans une string, alors le traitement par regex est très rapide.
0
Rejoignez-nous