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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
- 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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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