Excécution d'un remplacement avec VB dans un document Word avec zone de texte
5 réponses
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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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+
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.
[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.
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/
[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.
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" <Geo@sans.pub> a écrit dans le message de news:
mn.a4e37d93cb6f4c5a.41568@sans.pub...
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.
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/
[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+
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
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
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
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+
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.
[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+
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
Salutations,
C'est mieux ainsi. Cela ne me plaisait pas trop de voir l'affichage du
document se modifier par la sélection.