OVH Cloud OVH Cloud

Accès aux signets en VBA

4 réponses
Avatar
Sébastien
Bonjour,

je dois mettre au point un code VBA qui accède à un ensemble de signets pour
modifier du texte à des endroits précis d'un document Word (versions 2000 et
2002), en VBA.
Aucun problème pour tout ça, sauf pour un signet qui se trouve dans un
en-tête de page, VBA ne peut y accéder visiblement.
Y a-t-il une option à définir quelque part pour que Word intègre les
en-têtes et pieds de pages dans ses recherches de signets ? Si non, peut-on
contourner le problème ?

J'ai tenté de mettre un tableau dans le pied de page, et d'accéder via VBA
au contenu de la cellule (Collection Tables() ), mais idem, Word ne passe pas
en revue les tables dans les en-têtes et pieds de pages.

Merci !

Séb

4 réponses

Avatar
Anacoluthe
Bonjour !

'Sébastien' nous a écrit ...
je dois mettre au point un code VBA qui accède à un ensemble de signets
Aucun problème pour tout ça, sauf pour un signet qui se trouve dans un
en-tête de page, VBA ne peut y accéder visiblement.


On ne sait pas comment vous 'accédez' en vba à vos signets mais la
collection ActiveDocument.Bookmarks englobe aussi ceux des en-têtes !
Par ailleurs vous pouvez cibler un en-tête (ett) particulier : ainsi
ActiveDocument.Sections(1).Headers(1).Range.Bookmarks(1) désigne
le premier signet de l'ett primaire de la première section.

Y a-t-il une option à définir quelque part pour que Word intègre les
en-têtes et pieds de pages dans ses recherches de signets ? Si non, peut-on
contourner le problème ?


Pas besoin d'option :-p Si ça vous ennuie d'aller dans les ett, un truc
simple est de définir votre signet dans le corps de texte (au besoin
avec un champ SET) et de se contenter d'un renvoi en ett.
L'accès en vba aux tableaux des en-têtes suit la même logique.

Anacoluthe
« Dans la vie il faut prendre son pied sans se prendre la tête. »
- Gustave PARKING

Avatar
Sébastien
Bonjour,

Alors, quelques précisions :
J'ai défini plusieurs signets dans mon document ("NomAffaire",
"NomParticipant", ...). A l'ouverture du document, une UserForm s'affiche et
invite l'utilisateur à saisir des informations qui sont ensuite mises à jour
dans le document. J'utilise le code suivant derrière mon bouton "OK" :

Selection.GoTo What:=wdGoToBookmark, Name:="NomAffaire"
Selection.TypeText Text:=UserForm1.TextBox1.Text

etc. pour les autres signets.
Ca marche pour tous, sauf pour ceux qui sont en en-tête, en fait.
De même pour les tableaux :

j'ai insérer 3 tableau dans un document, ainsi qu'un en en-tête et un en
pied de page. J'exécute le code suivant :

For Each tableau In ActiveDocument.Tables()
tableau.Cell(Row:=2, Column:=2).Range.Text = "Test"
Next tableau

Seuls les tableaux du document principal sont touchés, pas ceux des en-tête
et pieds de page.

Je vais tenter d'auteres méthodes, ou à défaut passer par un signet, mais
j'aimerais trouver LA solution propre ;-)

Séb
Avatar
Anacoluthe
Bonjour !

'Sébastien' nous a écrit ...
Selection.GoTo What:=wdGoToBookmark, Name:="NomAffaire"


Pour aller très vite utilisez plutôt :
ActiveDocument.Bookmarks("NomAffaire").Select
car GoTo ne peut pas sortir de sa 'story'
Le mieux serait d'aller dans l'en-tête ou de l'afficher.
C'est aussi ce qu'il faut faire pour les tableaux.

Anacoluthe
« Dans la vie il faut prendre son pied sans se prendre la tête. »
- Gustave PARKING

Avatar
Sébastien
Là, c'est tout à fait ce que je voulais obtenir !

Un grand merci !

Séb