Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ref à des signets... J'y arrive pas...

3 réponses
Avatar
Gadget
Salut à tous.
J'ai des signets dont le texte est déterminé par un
.Bookmark("MonSignet").Range.Text = "Texte de mon signet"
Jusque là , tout baigne.
Etant donné que je dois reproduire ce texte ailleurs qu'à l'endroit du
signet dans mon document, j'ai introduit à ces endroits un
Insertion/champs/ref/MonSignet, qui s'affiche comme il se doit avec shiftF9
{ REF MonSignet}.
Problème, quand je lance ma macro et que je fais un enregistrer sous de mon
doc, ou que je l'imprime, les champs {} deviennent Erreur ! Source de renvoi
introuvable.
Et je m'arrache les cheveux...
Merci de votre aide.

3 réponses

Avatar
Anacoluthe
Bonjour !

'Gadget' nous a écrit ...
J'ai des signets dont le texte est déterminé par un
.Bookmark("MonSignet").Range.Text = "Texte de mon signet"
Jusque là , tout baigne.
Problème, quand je lance ma macro et que je fais un enregistrer sous de mon
doc, ou que je l'imprime, les champs {} deviennent Erreur ! Source de renvoi
introuvable.



Votre macro place le texte au signet mais DÉTRUIT le signet !

C'est une erreur hyperclassique en VBA Word qui s'explique assez
bien avec la structure double des signets à la fois emplacements
dans le document et conteneurs variables de texte.

Utilisez une procédure de ce type :

Public Sub RemplirSignet(S As String, T As String)
' Remplit le signet S avec le texte T sans supprimer S
On Error GoTo rien ' au cas où S n'existe pas !
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
ActiveDocument.Bookmarks(S).Range.Text = T
ActiveDocument.Bookmarks.Add Name:=S, _
Range:¬tiveDocument.Range(Place, Place + Len(T))
rien:
End Sub

Anacoluthe
« Le champ du signe. »
- Umberto ECO
Avatar
Gadget
Effectivement, on ne peut pas deviner cette nature des signets. Quelle drôle
d'idée qu'un objet qui est détruit quand on change une de ses propriétés...
Merci.

"Anacoluthe" a écrit dans le message de news:

Bonjour !

'Gadget' nous a écrit ...
J'ai des signets dont le texte est déterminé par un
.Bookmark("MonSignet").Range.Text = "Texte de mon signet"
Jusque là , tout baigne.
Problème, quand je lance ma macro et que je fais un enregistrer sous de
mon doc, ou que je l'imprime, les champs {} deviennent Erreur ! Source de
renvoi introuvable.



Votre macro place le texte au signet mais DÉTRUIT le signet !

C'est une erreur hyperclassique en VBA Word qui s'explique assez
bien avec la structure double des signets à la fois emplacements
dans le document et conteneurs variables de texte.

Utilisez une procédure de ce type :

Public Sub RemplirSignet(S As String, T As String)
' Remplit le signet S avec le texte T sans supprimer S
On Error GoTo rien ' au cas où S n'existe pas !
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
ActiveDocument.Bookmarks(S).Range.Text = T
ActiveDocument.Bookmarks.Add Name:=S, _
Range:¬tiveDocument.Range(Place, Place + Len(T))
rien:
End Sub

Anacoluthe
« Le champ du signe. »
- Umberto ECO


Avatar
Anacoluthe
Bonjour !

'Gadget' nous a écrit ...
Quelle drôle qu'un objet qui est détruit quand on change une de ses propriétés...



C'est un peu surprenant mais quand vous écrivez
.Bookmark("MonSignet").Range.Text = "Texte de mon signet"






vous ne modifiez pas une propriété d'un objet signet
vous modifiez un objet RANGE référencé par un signet
or le signet a ses propres limites /dans/ ce RANGE.

On comprend mieux le travail avec les signets en les affichant
(Options d'affichage) sous forme de I ou [ ] gris non imprimables.

Anacoluthe
« Le champ du signe. »
- Umberto ECO