OVH Cloud OVH Cloud

Signet dans Zone de texte

2 réponses
Avatar
Marie-Michel
Bonjour,

J'ai un signet dans une zone de texte que je veux utiliser dans une macro
qui «Atteindrait» ce signet pour y inscrire du texte dans la zone de texte où
il se trouve. Lorsque je déroule le menu Insertion, Signet, il est dans la
liste. Cependant, si je veux l'atteindre avec F5, Signet, Nom du signet, il
n'y est pas.

Comment puis-je dire, simplement, à une macro: «Atteindre» un signet s'il ne
le voit pas parce qu'il est dans une zone de texte?

La ligne d'instruction est simple mais ne fonctionnera pas dans une macro si
Word ne peut atteindre un signet dans une zone de texte. (Ex: Selection.GoTo
What:=wdGoToBookmark, Name:="NomDuSignet"). Que faire?

Merci, Marie :o)

Que faire?

2 réponses

Avatar
Jean-Guy Marcil
Marie-Michel was telling us:
Marie-Michel nous racontait que :

Bonjour,

J'ai un signet dans une zone de texte que je veux utiliser dans une
macro qui «Atteindrait» ce signet pour y inscrire du texte dans la
zone de texte où il se trouve. Lorsque je déroule le menu Insertion,
Signet, il est dans la liste. Cependant, si je veux l'atteindre avec
F5, Signet, Nom du signet, il n'y est pas.

Comment puis-je dire, simplement, à une macro: «Atteindre» un signet
s'il ne le voit pas parce qu'il est dans une zone de texte?

La ligne d'instruction est simple mais ne fonctionnera pas dans une
macro si Word ne peut atteindre un signet dans une zone de texte.
(Ex: Selection.GoTo What:=wdGoToBookmark, Name:="NomDuSignet"). Que
faire?



Il faut éviter l'objet Selection. Il cause toutes sortes d'ennuis et nous
force à faire des détours pour atteindre nos objectifs avec le code. L'objet
Range est beaucoup plus flexible, solide et efficace; mais plus difficile à
apprendre car l'enregistreur de macros n'utilise pas l'objet Range (qui veut
dire "Plage de texte").
Aussi, quand on travaille avec des signets, si tu trouve le signet et
remplace le texte, le signet disparait. Ce qui veut dire que le code ne peut
qu'être exécuté une seule fois. Je crois que c'est une bonne idée de
"sauver" le signet. Le code que je te propopse utilise l'objet Range (ce qui
veut dire qu'on a pas besoin de sélectionner quoi que ce soit) et replace le
signet une fois le texte remplacé.

'_______________________________________
'Déclarer les variables et leur type
Dim BookMarkName As String
Dim BookMarkRange As Range

'Définir le nom du signet
BookMarkName = "test"
'Définir le Range de texte représenté par le signet
Set BookMarkRange = _
ActiveDocument.Bookmarks(BookMarkName).Range

'Remplacer le texte
BookMarkRange.Text = "Nouveau joli texte"
'Recréer le signet
ActiveDocument.Bookmarks.Add _
Name:=BookMarkName, Range:=BookMarkRange
'_______________________________________

--
Salut!
_______________________________________
Jean-Guy Marcil - Word MVP

Word MVP site: http://www.word.mvps.org

Avatar
Anacoluthe
Bonjour !

'Marie-Michel' nous a écrit ...
J'ai un signet dans une zone de texte que je veux utiliser dans une macro
qui «Atteindrait» ce signet pour y inscrire du texte dans la zone de texte où
il se trouve. Lorsque je déroule le menu Insertion, Signet, il est dans la
liste. Cependant, si je veux l'atteindre avec F5, Signet, Nom du signet, il
n'y est pas.
Comment puis-je dire, simplement, à une macro: «Atteindre» un signet s'il ne
le voit pas parce qu'il est dans une zone de texte?
La ligne d'instruction est simple mais ne fonctionnera pas dans une macro si
Word ne peut atteindre un signet dans une zone de texte. (Ex: Selection.GoTo
What:=wdGoToBookmark, Name:="NomDuSignet"). Que faire?


Nous avons répondu à ça il y a peu : votre méthode GoTo
ne permet pas de sortir la sélection de sa 'story'
('article' ou zone de texte continue). Selection.GoTo ne
peut pas aller depuis le corps de texte dans un signet d'un
entête, un pied de page ou une zone de texte par exemple.

Essayez donc tout simplement :
ActiveDocument.Bookmarks("NomduSignet").Select
Qu'en pensez-vous ? :-)

Anacoluthe
« La vraie question est : pourquoi sélectionner?
Et je ne connais pas la réponse. »
- Albert JACQUARD