Modifier un entête dans Word

Résolu
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - Modifié le 20 mars 2018 à 14:37
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 21 mars 2018 à 10:18
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... ;-)

--

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 mars 2018 à 17:50
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

0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
Modifié le 21 mars 2018 à 09:43
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?
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
Modifié le 21 mars 2018 à 10:28
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... ;-)
--
0
Rejoignez-nous