Recherche de références croisées vers des signets spécifiques (Microsoft Word)
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.)
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.