Transformer du texte en renvoi dans word

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 244 fois - Téléchargée 17 fois

Contenu du snippet

Pour s'affranchir de la boîte "Insertion | Renvoi..." peu pratique de Word, cette macro permet de transformer le texte sélectionné (par ex. "3.2.2" ou "[2]") en renvoi cliquable vers l'élément numéroté ou le signet correspondant.

Source / Exemple :


Sub textToReference()
' Converti un texte sélectionné représentant un numéro de paragraphe en renvoi vers ce paragraphe,
' ou bien un texte représentant le texte d'un signet (indépendamment de son nom) en renvoi vers ce signet.
    Dim refToLookup As String
    Dim numberedItems() As String, strItem As String
    Dim iItem As Integer, iFound As Integer
    Dim strFound As String
    iFound = -1
    
    
    refToLookup = Trim(Selection.Text)
    
    ' Récupère les éléments numérotés
    numberedItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeHeading)
    
    For iItem = LBound(numberedItems) To UBound(numberedItems)
        strItem = Trim(numberedItems(iItem))
        If (Len(strItem) >= Len(refToLookup)) Then
            If (StrComp(refToLookup, Left(strItem, Len(refToLookup)), vbTextCompare) = 0) Then
                iFound = iItem
                strFound = numberedItems(iItem)
                Exit For
            End If
        End If
    Next iItem
    
    If (iFound > 0) Then
        ' Insertion d'un élément numéroté
        Selection.InsertCrossReference ReferenceType:=wdRefTypeHeading, _
        ReferenceKind:=wdNumberFullContext, ReferenceItem:=CStr(iFound), _
        InsertAsHyperlink:=True, IncludePosition:=False
    Else
        ' Non trouvé dans les éléments numérotés : parcours les signets
        ' Récupère les signets
        numberedItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeBookmark)
        Dim strBookmarkText As String
        For iItem = LBound(numberedItems) To UBound(numberedItems)
            strItem = Trim(numberedItems(iItem))
            strBookmarkText = ActiveDocument.Bookmarks(strItem).Range.Text
            If (Len(strBookmarkText) >= Len(refToLookup)) Then
                If (StrComp(refToLookup, Left(strBookmarkText, Len(refToLookup)), vbTextCompare) = 0) Then
                    iFound = iItem
                    strFound = strItem
                    Exit For
                End If
            End If
        Next iItem
        
        If (iFound > 0) Then
            ' Insertion d'un signet
            Selection.InsertCrossReference ReferenceType:=wdRefTypeBookmark, _
            ReferenceKind:=wdContentText, ReferenceItem:=strFound, _
            InsertAsHyperlink:=True, IncludePosition:=False
        End If
    End If
    
    If (iFound < 0) Then
        Call MsgBox("Aucun élement numéroté ni aucun signet """ & refToLookup & """ n'a été trouvé dans le document.", vbExclamation + vbOKOnly)
        Exit Sub
    End If
        
End Sub

Conclusion :


Associez cette macro à un raccourci clavier pratique, tapez juste le numéro de paragraphe ou texte du signet, sélectionnez-le, Ctrl-Machin, et zou, un renvoi de fait !

A voir également

Ajouter un commentaire

Commentaire

Messages postés
9
Date d'inscription
lundi 19 février 2007
Statut
Membre
Dernière intervention
8 décembre 2017

Bonjour,
Je suis très intéressée par cette macro que j'avais d'ailleurs réussi à utiliser sur des documents précédents.
Malheureusement, je ne connais rien en macro et elle s'était désactivée (?) des mes documents.
j'ai vraiment besoin de m'en servir, je l'ai donc copier/coller mais elle ne fonctionne pas du tout.
Est-ce quelqu'un pourrait me guider pour voir ce qui ne va pas et éventuellement m'indiquer ce qu'il faut faire pour que je puisse toujours y avoir accès et m'en servir dès que nécessaire.

Par avance merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.