IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Créer un signet dans l'entête Word


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,


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


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 6
    Par défaut
    Salut

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

    Merci de ton aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Expert confirmé
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
            Selection = NouvelleValeurSignet 'le bug est ici... le remplacement de la valeur supprime le signet
    @+

Discussions similaires

  1. Créer dynamiquement des signets dans un doc Word
    Par krouchynka dans le forum VBA Word
    Réponses: 6
    Dernier message: 11/06/2011, 17h49
  2. Comment créer un signet dans PowerPoint 2002 ?
    Par Invité dans le forum Powerpoint
    Réponses: 11
    Dernier message: 18/11/2008, 19h23
  3. Créer une somme dans un formulaire Word
    Par angeld dans le forum Windows
    Réponses: 8
    Dernier message: 02/11/2006, 18h35
  4. Réponses: 6
    Dernier message: 04/11/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo