James marque des éléments dans ses documents pour les renvoyer. Parfois, lors du processus d’édition, il peut avoir besoin de supprimer quelque chose qu’il a précédemment mis en signet. James se demande s’il existe un moyen de savoir s’il existe des renvois au texte (et au signet) qu’il envisage de supprimer.

Si vous ne devez effectuer cette tâche que de temps en temps, vous pouvez le faire manuellement. La façon dont vous l’abordez, cependant, dépendra de la façon dont vous avez créé la référence croisée. Vous voyez, lorsque vous insérez une référence croisée, Word affiche la boîte de dialogue Référence croisée. (Voir la figure 1.)

image

Figure 1. La boîte de dialogue Références croisées.

Dans la boîte de dialogue, à l’aide de la liste déroulante Type de référence, vous pouvez choisir le type de référence croisée que vous souhaitez créer. Chaque type de référence utilise une variation différente du champ REF pour insérer la référence croisée réelle. Par exemple, si vous insérez une référence croisée à un signet, le champ inséré ressemble à ceci:

{ REF MyBookmark \h }

La partie « MyBookmark » est le nom du signet auquel vous faites des références croisées.

Le paramètre (dans ce cas \ h) est contrôlé par la liste déroulante Insérer une référence dans dans la boîte de dialogue Références croisées. Si, à la place, vous insérez une référence croisée à un titre dans le document, cela ressemblera à ceci:

{ REF _Ref47603047 \h }

La partie «_Ref47603047» de ce code de champ est un signet généré par le système qui est masqué. Il fait référence à l’en-tête que vous avez sélectionné pour votre référence croisée. Vous pouvez voir ces signets masqués si vous affichez la boîte de dialogue Signets et cliquez sur la case à cocher Signets cachés en bas de la boîte de dialogue.

Dans cette astuce, parce que James a spécifiquement demandé à trouver des références croisées vers du texte mis en signet, je vais supposer que lorsqu’il a créé la référence croisée, il l’a fait en choisissant Signet dans la liste déroulante Insérer une référence à de la croix boîte de dialogue de référence. Cela permet également de trouver un peu plus facilement si votre signet est référencé n’importe où.

Commencez par déterminer le nom du signet qui se trouve dans le texte que vous envisagez de supprimer. Dans ce cas, je vais supposer qu’il s’agit d’un nom tel que MyBookmark. Tout ce que vous devez faire est d’appuyer sur Alt + F9, ce qui oblige Word à afficher les codes de champ dans votre document plutôt que les résultats des codes de champ. À ce stade, vous pouvez simplement rechercher le nom du signet (MyBookmark, dans ce cas) et vous pourrez trouver n’importe quel champ REF (rappelez-vous, les champs REF sont utilisés pour les références croisées)

qui contient le nom du signet. Si vous ne trouvez pas le nom du signet, il n’y a aucune référence croisée à ce signet et vous pouvez supprimer en toute sécurité le texte et le signet qu’il contient. Lorsque vous avez terminé, appuyez à nouveau sur Alt + F9 pour désactiver l’affichage des codes de champ.

Si vous avez besoin de savoir si un signet est référencé plus d’une fois de temps en temps, ou si vous souhaitez effectuer une recherche plus complète que ce que propose Rechercher et remplacer, vous devez envisager d’utiliser une macro. L’ensemble de quatre macros suivant peut s’avérer utile dans cette situation.

Sub IsBookmarkReferenced()

Dim aStory As Range     Dim aShape As Shape     Dim aField As Field     Dim bkName As String     Dim bReffed As Boolean

bReffed = False     If Selection.Bookmarks.Count > 0 Then         bkName = Selection.Bookmarks(1).Name         For Each aStory In ActiveDocument.StoryRanges             If TestForBookmark(aStory, bkName) Then                 bReffed = True             Else                 Select Case aStory.StoryType                     Case wdMainTextStory, wdEvenPagesHeaderStory, _                       wdPrimaryHeaderStory, wdEvenPagesFooterStory, _                       wdPrimaryFooterStory, wdFirstPageHeaderStory, _                       wdFirstPageFooterStory                         For Each aShape In aStory.ShapeRange                             If aShape.TextFrame.HasText Then                                 If TestForBookmark(aShape.TextFrame.TextRange, bkName) Then bReffed = True                             End If                         Next                     End Select                 Next aStory             Endif         Next aStory         sTemp = "Bookmark " & bkName & " is "

If Not bReffed Then sTemp = sTemp & "NOT "

sTemp = sTemp & "referenced in the document."

Else         sTemp = "There is no bookmark in the selected text."

End If     MsgBox sTemp End Sub
Function TestForBookmark(tRange As Range, bkName As String) As Boolean     Dim aField As Field

TestForBookmark = True     For Each aField In tRange.Fields         Select Case aField.Type             Case wdFieldRef, wdFieldAsk, wdFieldBarCode, _               wdFieldGoToButton, wdFieldHyperlink, _               wdFieldNoteRef, wdFieldPageRef, wdFieldSet                 If BookRef(aField.Code.Text, aField.Type) = bkName Then Exit Function             Case wdFieldTOC, wdFieldTOA                 If TOCRef(aField.Code.Text) = bkName Then Exit Function         End Select     Next aField     TestForBookmark = False End Function
Function BookRef(str As String, typeCode As Long) As String     Dim s As String     Dim i As Long

s = Trim(str)

If s <> "" Then         i = InStr(s, " ")

If i > 0 Then s = Trim(Mid(s, i))

If typeCode = wdFieldHyperlink Then             If InStr(s, "\l") > 0 Then                 s = Mid(s, InStr(s, """") + 1)

i = InStr(s, """")

If i > 1 Then s = Left(s, i - 1)

Else                 s = ""

End If         Else             i = InStr(s, " ")

If i > 0 Then s = Trim(Left(s, i))

End If     End If     BookRef = s End Function
Function TOCRef(str As String) As String     Dim s As String     Dim i As Long

s = Trim(str)

i = InStr(s, "\b")

If i = 0 Then         TOCRef = ""

Exit Function     End If     s = Trim(Mid(s, i + 2))

i = InStr(s, " ")

If i > 0 Then s = Left(s, i - 1)

TOCRef = s End Function

Pour utiliser les macros, tout ce que vous avez à faire est de sélectionner le texte que vous envisagez de supprimer, puis d’exécuter la macro IsBookmarkReferenced.

Il utilise à son tour les trois autres fonctions pour déterminer si un signet dans le texte sélectionné est référencé ailleurs. La macro vérifie les champs non seulement dans le document principal lui-même, mais également dans les en-têtes, pieds de page et zones de texte.

WordTips est votre source pour une formation Microsoft Word rentable.

(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (7619) s’applique à Microsoft Word 2007, 2010, 2013, 2016, 2019 et Word dans Office 365.