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

Excécution d'un remplacement avec VB dans un document Word avec zone de texte

5 réponses
Avatar
Patrick
Salutation,

Voilà mon problème, je ne sais pas si c'est ici ou dans le forum sur VB que
je dois posé ma question.
Lorsque je veux remplacer du texte dans un document Word ayant des zones de
texte en le faisant par VB,
il le fait uniquement en dehors des zones de texte.
Comment faire pour qu'il remplace aussi les occurences dans les zones de
texte.
J'ai essayer de faire un enregistrement de macro avec l'enregistreur mais
cela ne fonctionne pas.
Il me donne une macro qui ne donne pas le résultat escompté.
Sub Macro1()
'
' Macro1 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "$date$"
.Replacement.Text = "19/03/2009"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Par contre, lorsque je fais un remplacement dans Word sans utiliser le VB,
cela fonctionne parfaitement.

J'ai essayer plusieurs méthodes d'utilisation de 'Find'
Le problème ne vient pas de 'Find' mais de la plage 'Content', 'Selection'
ou 'Range' de recherche et remplacement,
mais comment y inclure les zones de texte?

Merci

Patrick

5 réponses

Avatar
Geo
Bonjour Patrick
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]



Une idée, mais que je n'ai pas vérifié : content est l'article
principal du document, il se peut que les zones de texte n'en fassent
pas partie.
Vous n'avez d'ailleurs pas non plus les en-têtes, commentaires etc.
Si vous êtes en version 2007, vous avez en page d'aide HV10058610
un exemple pour passer sur tous les articles.
La notion d'article n'est pas décrite dans l'aide, mais vous en avez la
liste avec l'énumération WdStoryType.

--
A+
Avatar
heureux-oli
Salut,

Peut-être un piste.

ActiveDocument.Shapes(1).Select
Selection.ShapeRange.TextFrame.TextRange.Select

Il faut ensuite faire la recherche dans la sélection.

En utilisant ce code, je récupère bien le contenu de mon textbox.
Il faut le faire pour tout les objets shapes du document et faire un test
pour déterminer si c'est bien un TextFrame.
Petite précision, j'ai utilisé Word 2007 pour faire mon test.

--
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 Patrick
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]



Une idée, mais que je n'ai pas vérifié : content est l'article principal
du document, il se peut que les zones de texte n'en fassent pas partie.
Vous n'avez d'ailleurs pas non plus les en-têtes, commentaires etc.
Si vous êtes en version 2007, vous avez en page d'aide HV10058610
un exemple pour passer sur tous les articles.
La notion d'article n'est pas décrite dans l'aide, mais vous en avez la
liste avec l'énumération WdStoryType.

--
A+




Avatar
Patrick
Salutations,

Bon, après vos réponses et des recherches voici ce que j'ai pondu.

Sub Macro1()
For Each myStoryRange In ActiveDocument.StoryRanges
myStoryRange.Select
With Selection.Find
.Text = "$date$"
.Replacement.Text = "19/03/2009"
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next myStoryRange
ActiveWindow.View.Type = wdPrintView
End Sub

Cela marche parfaitement

Merci.

Patrick
Avatar
Geo
Bonjour Patrick
[Réponse faite sur le forum public Word :
news://msnews.microsoft.com/ microsoft.public.fr.word ]



Merci pour ce retour, juste pour la beauté, il n'est pas nécessaire de
passer par une sélection :

Dim myStoryRange As Range
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange.Find
.Text = "$date$"
.Replacement.Text = "19/03/2009"
End With
myStoryRange.Find.Execute Replace:=wdReplaceAll
Next myStoryRange

Ça va plus vite et ça évite de voir défiler le document plusieurs fois.
A l'inverse, l'utilisateur qui ne voit rien peut se poser des
questions.

--
A+
Avatar
Patrick
Salutations,

C'est mieux ainsi. Cela ne me plaisait pas trop de voir l'affichage du
document se modifier par la sélection.

merci

Patrick