Modifier un entête dans Word [Résolu]

Messages postés
117
Date d'inscription
vendredi 1 février 2008
Dernière intervention
21 mars 2018
-
Bonjour,

C'est à la fois du VBA et du VB.NET.

J'ai un document word (.dotx) dont l'entête comporte plusieurs informations balisées que je dois pouvoir modifier avec VB.NET.



J'aimerai pouvoir modifier les parties balisées (#) de la même façon que la modification dans le corps de texte:
Dim ow as Object = CreateObject("Word.Application")
Dim Doc as Object = ow.Documents.Open("Adresse Document", ReadOnly := True)
ow.Visible = True
ow.Application.ActiveDocument.Content.Find.Execute(FindText:="Texte balisé à remplacer", ReplaceWith:="Nouveau texte")


Or, ce code ne convient pas aux entêtes.

Quelqu'un aurait une solution?

Merci d'avance... ;-)

--
Afficher la suite 

Votre réponse

2 réponses

Messages postés
5599
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
Bonjour,

Quand on pilote Word depuis VB.NET il faut d'abord trouver le code vba de Word et ensuite l'adapter.

voir ceci:

Propriété MatchWildcards

https://msdn.microsoft.com/en-us/library/aa213881(office.11).aspx

Et quand je vois ceci, on procède d'une autre manière en VB.NET:

Dim ow as Object = CreateObject("Word.Application")


http://codes-sources.commentcamarche.net/source/100410-piloter-office-en-vb-net

Shaegal
Messages postés
117
Date d'inscription
vendredi 1 février 2008
Dernière intervention
21 mars 2018
-
Bonjour et merci pour ta réponse.

Adapter du VBA en VB.NET n'est pas un problème. Trouver le code VBA en est parfois un. Dans mon cas, même l'enregistreur de macros ne m'a rien donné. C'est pourquoi je suis venu chercher de l'aide ici.

Je procède de cette manière car, dans la l'entreprise où je travailles, nous n'avons pas les mêmes versions d'Office. Certains sont encore en 97-2003 et d'autres en 2016. Je suis en version 2010.
De cette façon, je m’affranchis de la gestion des versions. J'ai déjà eu ce problème avant quand j'utilisais l'interop.

Ton premier lien fonctionne très bien (mais ne remplace pas) dans le corps de texte. Mais pas dans l'entête.

Par contre, j'ai testé ton lien et ma méthode (qui présente l'avantage de s'écrire en une seule ligne et remplace le texte trouvé) en "activant" avant (double-clic dans) la zone de l'entête. Et là, tout fonctionne.

Ma question devient maintenant: comment sélectionner (activer?) l'entête pour y effectuer mes modifications en VBA, puis revenir dans le corps de texte?
Commenter la réponse de cs_Le Pivert
Messages postés
117
Date d'inscription
vendredi 1 février 2008
Dernière intervention
21 mars 2018
0
Merci
Bon, j'ai fini par trouver la solution à mon problème. Peut-être peu élégante mais fonctionnelle.

Pour ceux que ça intéresse:

ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
f = Selection.Find.Execute(FindText:="Texte balisé à remplacer", ReplaceWith:="Nouveau texte")
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument


Merveilleux... ;-)
--
Commenter la réponse de Shaegal

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.