Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

parcourir le document par un FIND

11 réponses
Avatar
jean-paul.bataille
Bonjour,

Plutot que parcourir mon document paragraphe par paragraphe,
pour gagner du temps,
il me semble pr=E9f=E9rable de proc=E9der 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=C9RE EN STYLE
PERSONNALIS=C9

Dim rng As Range
Dim parag As Paragraph

Set rng =3D ActiveDocument.Range

With rng.Find
.Text =3D "FindMe"
.Replacement.Text =3D "\&"

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

End Sub

Ce code trouve bien la premi=E8re occurence de la chaine FindMe",
modifie bien le style du paragraphe contenant "FindMe" et celui le
pr=E9c=E9dent.

MAIS il ne passe pas aux autres occurence de "FindMe"
Quelque chose comme :
Selection.Find.Execute Replace:=3DwdReplaceAll
Merci d evotre collaboration

10 réponses

1 2
Avatar
heureux-oli
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/

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

a écrit dans le message de news:

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
Avatar
jean-paul.bataille
> 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,
Avatar
heureux-oli
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/

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

a écrit dans le message de news:

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,
Avatar
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+
Avatar
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" a écrit dans le message de news:

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+




Avatar
heureux-oli
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" a écrit dans le message de news:

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" a écrit dans le message de news:

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+








Avatar
jean-paul.bataille
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
Avatar
heureux-oli
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/

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

a écrit dans le message de news:


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
Avatar
jean-paul.bataille
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.
Avatar
Geo
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+
1 2