parcourir le document par un FIND

Le
jean-paul.bataille
Bonjour,

Plutot que parcourir mon document paragraphe par paragraphe,
pour gagner du temps,
il me semble préférable de procéder au moyen d'un "FIND",

Voici le code qui tourne :

Sub Formater_NomEtDate()
'PASSER LES NOMS D'OBJETS EN "Titre 2"
'PASSE LES PARAGRAPHES CONTENANT UNE CHAINE REPÉRE EN STYLE
PERSONNALISÉ

Dim rng As Range
Dim parag As Paragraph

Set rng = ActiveDocument.Range

With rng.Find
.Text = "FindMe"
.Replacement.Text = "&"

If .Execute Then
Set Para = rng.Paragraphs(1)
If Not (Para Is Nothing) Then
Set rng = Para.Range
rng.Style = "UserStyle_1"
Para.Previous.Range.Style = "UserStyle_2"
Else
MsgBox "CAS À TRAITER ?"
End If
End If
End With

End Sub

Ce code trouve bien la première occurence de la chaine FindMe",
modifie bien le style du paragraphe contenant "FindMe" et celui le
précédent.

MAIS il ne passe pas aux autres occurence de "FindMe"
Quelque chose comme :
Selection.Find.Execute Replace:=wdReplaceAll
Merci d evotre collaboration
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
heureux-oli
Le #18996091
Salut,

Il me semble que utilisation de cette ligne
Set Para = rng.Paragraphs(1)

va toujours adresser le premier paragraphe du range.
Ce qui nous donne une boucle inutile.

Voilà une boucle
*******************************************
Sub rechercheFindMe()

Selection.HomeKey unit:=wdStory

Do
Selection.Find.ClearFormatting
With Selection.Find
.Text = "FindMe"
.Execute
End With
Selection.Expand unit:=wdParagraph
Selection.Range.Style = "UserStyle_2"
Selection.MoveRight unit:=wdCharacter, Count:=1
Loop Until Selection.Find.Execute = False



End Sub
*****************************************
À toi de voir.
--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------


Bonjour,

Plutot que parcourir mon document paragraphe par paragraphe,
pour gagner du temps,
il me semble préférable de procéder au moyen d'un "FIND",

Voici le code qui tourne :

Sub Formater_NomEtDate()
'PASSER LES NOMS D'OBJETS EN "Titre 2"
'PASSE LES PARAGRAPHES CONTENANT UNE CHAINE REPÉRE EN STYLE
PERSONNALISÉ

Dim rng As Range
Dim parag As Paragraph

Set rng = ActiveDocument.Range

With rng.Find
.Text = "FindMe"
.Replacement.Text = "&"

If .Execute Then
Set Para = rng.Paragraphs(1)
If Not (Para Is Nothing) Then
Set rng = Para.Range
rng.Style = "UserStyle_1"
Para.Previous.Range.Style = "UserStyle_2"
Else
MsgBox "CAS À TRAITER ?"
End If
End If
End With

End Sub

Ce code trouve bien la première occurence de la chaine FindMe",
modifie bien le style du paragraphe contenant "FindMe" et celui le
précédent.

MAIS il ne passe pas aux autres occurence de "FindMe"
Quelque chose comme :
Selection.Find.Execute Replace:=wdReplaceAll
Merci d evotre collaboration
jean-paul.bataille
Le #18997181
> Do
Selection.Find.ClearFormatting
……
……
Loop Until Selection.Find.Execute = False

End Sub
*****************************************
Heureux-oli



Merci de ce bout de code Heeureux-Oli,
Mais il saute une occurence sur deux, du fait de selection.find
execute = false dans la ligne Loop…


Merci de l'aide,
heureux-oli
Le #18997471
Salut,

C'est qu'il y a autre chose,


Selection.Find.Execute = False

C'est juste un test pour savoir si la dernière recherche a été fructueuse,
si c'est le cas, on lance une nouvelle recherche.

Qu'une occurence sur deux soit omise, c'est que tu ne m'as pas tous dit !
mdr.



--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------


Do
Selection.Find.ClearFormatting
……
……
Loop Until Selection.Find.Execute = False

End Sub
*****************************************
Heureux-oli



Merci de ce bout de code Heeureux-Oli,
Mais il saute une occurence sur deux, du fait de selection.find
execute = false dans la ligne Loop…


Merci de l'aide,
Geo
Le #18997631
Bonjour

Selection.Find.Execute = False

C'est juste un test



T'es sûr ?
Je dirais plutôt que ça fait avancer d'un cran.

Quand je fais une boucle "Manuelle", je fais :
Trouvé = Selection.Find.Execute

et ensuite :
Loop Until Trouvé = False

--
A+
heureux-oli
Le #18997871
Salut,

Extrait de l'aide

"Renvoie la valeur True si l'opération a été effectuée avec succès. Argument
de type Boolean."

Si on l'utilise dans une expression, on récupère un boolean. Je pensais que
le fait de l'utiliser en simple comparaison n'appliquait pas la méthode, si
c'est le cas, alors il faut en enlever un des deux, et de préférence le
premier.

J'aurais donc eu de la chance en l'utilisant.

--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

"Geo"
Bonjour

Selection.Find.Execute = False

C'est juste un test



T'es sûr ?
Je dirais plutôt que ça fait avancer d'un cran.

Quand je fais une boucle "Manuelle", je fais :
Trouvé = Selection.Find.Execute

et ensuite :
Loop Until Trouvé = False

--
A+




heureux-oli
Le #18998411
Salut,

La nuit fait dormir.
Geo ayant raison, j'ai modifié le code proposé.

*******************************************
Sub rechercheFindMe()
Dim myResult As Boolean
Selection.HomeKey unit:=wdStory

Do
Selection.Find.ClearFormatting
With Selection.Find
.Text = "FindMe"
myResult = .Execute
End With
Selection.Expand unit:=wdParagraph
Selection.Range.Style = "UserStyle_2"
Selection.MoveRight unit:=wdCharacter, Count:=1
Loop while myResult


End Sub
*****************************************


--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

"heureux-oli"
Salut,

Extrait de l'aide

"Renvoie la valeur True si l'opération a été effectuée avec succès.
Argument de type Boolean."

Si on l'utilise dans une expression, on récupère un boolean. Je pensais
que le fait de l'utiliser en simple comparaison n'appliquait pas la
méthode, si c'est le cas, alors il faut en enlever un des deux, et de
préférence le premier.

J'aurais donc eu de la chance en l'utilisant.

--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------

"Geo"
Bonjour

Selection.Find.Execute = False

C'est juste un test



T'es sûr ?
Je dirais plutôt que ça fait avancer d'un cran.

Quand je fais une boucle "Manuelle", je fais :
Trouvé = Selection.Find.Execute

et ensuite :
Loop Until Trouvé = False

--
A+








jean-paul.bataille
Le #18998991
Merci à vous deux,
c'est tout à fait ce que je cherche, reste plus qu'a adapter à mon
besoin réel.
Normal il faut bien progresser,
mais avec un support tel que celui que vous offrez tout les deux :
solution certe mais aussi explication; je vais passer un bon week-end.

Jean-Paul
heureux-oli
Le #18999061
Salut,

Moi aussi, mais pour d'autres raisons.
Comme tous les ans à pareille époque, les apertintailles vont résonner ce
WE.

Donc, bon WE


--
Heureux-oli
Si rien n'est mentionné pour le code, c'est que j'en suis l'auteur.
http://heureuxoli.developpez.com/
http://word.developpez.com/

----------------------------------------------------------------------------------



Merci à vous deux,
c'est tout à fait ce que je cherche, reste plus qu'a adapter à mon
besoin réel.
Normal il faut bien progresser,
mais avec un support tel que celui que vous offrez tout les deux :
solution certe mais aussi explication; je vais passer un bon week-end.

Jean-Paul
jean-paul.bataille
Le #19002711
Et voici :

Sub rechercheFindMe()

Dim myResult As Boolean

'venir au début du document
Selection.HomeKey unit:=wdStory

Do
'boucler pour passer en revue les "FindMe"
Selection.Find.ClearFormatting
With Selection.Find
.Text = "FindMe"
myResult = .Execute
End With
'traiter par paragraphe complet
Selection.Expand unit:=wdParagraph
'paragraphe précédent le "FindMe"
Selection.Range.Previous.Style = "UserStyle_1"
'paragraphe du "FindMe"
Selection.Range.Style = "UserStyle_2"
Selection.MoveRight unit:=wdCharacter, Count:=1
Loop While myResult

End Sub


En fait je recherche une chaine "FindMe", jemet le paragraphe
précédent au style "UserStyle_1", alors que le paragraphe contenant
"FinfMe" est mis en style "UserStyle_2".

Merci pour le coup de main.
Geo
Le #19002961
Bonjour Jean-Paul

J'ai un petit doute ici :

'paragraphe précédent le "FindMe"
Selection.Range.Previous.Style = "UserStyle_1"



Comme vous n'avez pas précisé le unit pour Previous, il n'est pas
évident que ce soit le "paragraphe" précédent.
Je n'ai pas vu dans la documentation quelle est l'unit par défaut.
Mais si ça marche, pourquoi se poser des questions ?
Bien joué.

--
A+
Publicité
Poster une réponse
Anonyme