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

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Anacoluthe
Le #16764701
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
Gadget
Le #16764901
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"
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


Anacoluthe
Le #16768381
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
Publicité
Poster une réponse
Anonyme