Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 10h54   #1
Invité de passage
 
Inscription : août 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 6
Points : 0
Points : 0
Par défaut Créer un signet dans l'entête Word

Bonjour à tous

bravo pour ce site et ce forum, qui me dépanne bien dans mes activités.

J'utilise cette fonction afin de modifier un signet existant et le recréer aussitôt. Il fonctionne très bien si mon signet est dans le corps principal de mon fichier word. Cependant, comme mentionné dans l'intitulé de ce message, je souhaiterai également le faire fonctionner pour les signets de l'entête de mon document. Seulement je n'arrive pas à l'adapter.

le problème est en ligne :
Set MyRng = ActiveDocument.Range(Start:=intI, End:=intI + Len(stTexte))
Je suppose que l'ActiveDocument n'est pas correct, puisque que mon signet est dans l'entête, donc il ne le trouve pas.

Merci de votre aide.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function RemplacerTexteSignet(MyBM As Bookmark, stTexte As String) As Boolean
'Déclaration des variables
'intI pour le début de notre Bookmark
Dim intI As Long
'stBM pour le nom de notre Bookmark
Dim stBM As String
'un objet range pour le range de notre Bookmark
Dim MyRng As Range
 
'Récupération du nom du signet
stBM = MyBM.Name
'Récupération de la position de départ de notre signet
intI = MyBM.Start
'Affectation du texte à notre Bookmark
MyBM.Range.Text = stTexte
'Affectation de l'objet Range, où la position de départ est 
' la même que pour le Bookmark et la fin sera le début augmenté 
' de la longueur du texte
Set MyRng = ActiveDocument.Range(Start:=intI, End:=intI + Len(stTexte))
' Crée le Bookmark sur l'objet Range
ActiveDocument.Bookmarks.Add stBM, MyRng
Set MyRng = Nothing
'Affectation de la valeur True à la fonction
RemplacerTexteSignet = True
End Function
gaetan cousseau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 16h36   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 338
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 338
Points : 29 246
Points : 29 246
Salut,


On peut atteindre le Range d'un entête de document avec la story de ce morceau de document.


Code :
Activedocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
Ce n'est donc pas ActiveDocument qui est mauvais.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2011, 17h53   #3
Invité de passage
 
Inscription : août 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 6
Points : 0
Points : 0
Salut et merci pour ton aide

j'ai donc modifié ma fonction comme ci-dessous. Elle fonctionne en partiellement car, les signets sont bien valorisés mais recréé tous un par dessus l'autre au point 0,0 de l'entête et non là où ils sont initialement placés.

Merci de ton aide

PS : Je dispose de 4 signets distincts dans mon entête

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function RemplacerTexteSignet(MyBM As Bookmark, stTexte As String) As Boolean
'Déclaration des variables
'intI pour le début de notre Bookmark
Dim intI As Long
'stBM pour le nom de notre Bookmark
Dim stBM As String
'un objet range pour le range de notre Bookmark
Dim MyRng As Range
 
'Récupération du nom du signet
stBM = MyBM.Name
'Récupération de la position de départ de notre signet
intI = MyBM.Start
'Affectation du texte à notre Bookmark
MyBM.Range.Text = stTexte
'Affectation de l'objet Range, où la position de départ est
' la même que pour le Bookmark et la fin sera le début augmenté
' de la longueur du texte
Set MyRng = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range
' Crée le Bookmark sur l'objet Range
ActiveDocument.Bookmarks.Add stBM, MyRng
Set MyRng = Nothing
'Affectation de la valeur True à la fonction
RemplacerTexteSignet = True
End Function
gaetan cousseau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 11h33   #4
Invité de passage
 
Inscription : août 2009
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 6
Points : 0
Points : 0
Salut

je m'en suis sorti avec le programme ci-dessous.

Merci de ton aide

Code :
1
2
3
4
5
6
7
8
Sub BookmarkNewValue(ByVal NomSignet As String, ByVal NouvelleValeurSignet As String)
    If ActiveDocument.Bookmarks.Exists(NomSignet) Then
        ActiveDocument.Bookmarks(NomSignet).Select
        Selection = NouvelleValeurSignet 'le bug est ici... le remplacement de la valeur supprime le signet
        Selection.Bookmarks.Add Name:=NomSignet, Range:=Selection.Range
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    End If
End Sub
gaetan cousseau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 18h32   #5
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut gaetan cousseau,

Ce que tu signales comme un bug est le comportement normal de Word qui s'explique d'ailleurs lorsque tu regardes de près le fonctionnement de Word (OK j'exagère un peu, il faut regarder de très très près) : Word remplace le signet lorsque celui-ci est sélectionné en l'écrasant ==> on doit donc le remettre pour le retrouver ou travailler avec le contenu du signet pas avec le signet.

Citation:
Envoyé par gaetan cousseau
Code :
        Selection = NouvelleValeurSignet 'le bug est ici... le remplacement de la valeur supprime le signet
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h07.


 
 
 
 
Partenaires

Hébergement Web