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
Pas si finement que cela : aprés le "Find", quelque soit le résultat je change de style , ce n'est pas ce qui est désiré en particulier lors du dernier "FindMe" inclus dans mon texte.
Il faut rajouter un IF THEN pour éviter ça. Il y a peut étre plus élégant comme solution.
Ce qui donne finalement :
Do 'boucler pour passer en revue les "FindMe" Selection.Find.ClearFormatting With Selection.Find .Text = "FindMe" myResult = .Execute End With If myResult = True Then 'traiter par paragraphe complet Selection.Expand unit:=wdParagraph 'paragraphe précédent le "FindMe" Selection.Range.Previous.Style = "Titre 1" 'paragraphe du "FindMe" Selection.Range.Style = "Titre 2" Selection.MoveRight unit:=wdCharacter, Count:=1 End If Loop While myResult
Merci Géo, merci Heureux-Oli
> Bien joué.
Pas si finement que cela : aprés le "Find", quelque soit le résultat
je change de style , ce n'est pas ce qui est désiré en particulier
lors du dernier "FindMe" inclus dans mon texte.
Il faut rajouter un IF THEN pour éviter ça.
Il y a peut étre plus élégant comme solution.
Ce qui donne finalement :
Do
'boucler pour passer en revue les "FindMe"
Selection.Find.ClearFormatting
With Selection.Find
.Text = "FindMe"
myResult = .Execute
End With
If myResult = True Then
'traiter par paragraphe complet
Selection.Expand unit:=wdParagraph
'paragraphe précédent le "FindMe"
Selection.Range.Previous.Style = "Titre 1"
'paragraphe du "FindMe"
Selection.Range.Style = "Titre 2"
Selection.MoveRight unit:=wdCharacter, Count:=1
End If
Loop While myResult
Pas si finement que cela : aprés le "Find", quelque soit le résultat je change de style , ce n'est pas ce qui est désiré en particulier lors du dernier "FindMe" inclus dans mon texte.
Il faut rajouter un IF THEN pour éviter ça. Il y a peut étre plus élégant comme solution.
Ce qui donne finalement :
Do 'boucler pour passer en revue les "FindMe" Selection.Find.ClearFormatting With Selection.Find .Text = "FindMe" myResult = .Execute End With If myResult = True Then 'traiter par paragraphe complet Selection.Expand unit:=wdParagraph 'paragraphe précédent le "FindMe" Selection.Range.Previous.Style = "Titre 1" 'paragraphe du "FindMe" Selection.Range.Style = "Titre 2" Selection.MoveRight unit:=wdCharacter, Count:=1 End If Loop While myResult