Selection.Find un nombre quelconque

Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019
- - Dernière réponse : Whismeril
Messages postés
14027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
- 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.

--
Afficher la suite 

3 réponses

Messages postés
14027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322
0
Merci
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

Commenter la réponse de Whismeril
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019
0
Merci
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...

--
Commenter la réponse de cs_Apolinaire
Messages postés
14027
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2019
322
0
Merci
Bonjour
Si tu peux charger tout le texte dans une string, alors le traitement par regex est très rapide.
Commenter la réponse de Whismeril