Denise développe une macro, et elle doit tester pour voir si le point d’insertion est situé dans un signet. Elle a besoin de le savoir car si le point d’insertion est dans un signet, elle a besoin que le code modifie le signet; s’il ne figure pas dans un signet, son code doit en créer un.

En théorie, le processus est assez simple. Tout ce que vous avez à faire est de vérifier le nombre de signets dans la sélection, de cette manière:

If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark End If

Cela fonctionne que la sélection soit une plage de texte ou que la sélection soit réduite au seul point d’insertion. Il y a cependant quelques «pièges» potentiels à prendre en compte. La première est que si le point d’insertion est immédiatement à gauche d’un signet (en touchant simplement le début du signet), la propriété Count sera toujours supérieure à 0. En effet, la sélection définie par le point d’insertion réduit est considéré comme incluant le caractère juste à droite du point d’insertion.

La deuxième chose à savoir est que si votre sélection est réduite, vous ne pouvez pas vous fier à la valeur de la propriété Count sur 0 ou 1. En effet, elle pourrait être supérieure à 1 car il est possible que les signets se «chevauchent»

et, par conséquent, pour que le point d’insertion se trouve dans plus d’un signet simultanément. Vous pouvez donc avoir besoin de votre code pour tester les signets dans lesquels se trouve le point d’insertion. La manière la plus simple de faire ceci est d’examiner la propriété Name des signets, de cette manière:

Dim bFoundIt As Boolean Dim J As Integer

bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark     For J = 1 To Selection.Bookmarks.Count         If Selection.Bookmarks(J).Name = "DesiredName" Then             bFoundIt = True         End If     Next J End If

Lorsque ce code est exécuté, bFoundIt aura la valeur True uniquement si le point d’insertion se trouve dans le signet souhaité. Notez également l’inclusion d’une commande pour réduire la sélection pour s’assurer qu’elle se trouve réellement dans un point d’insertion et non dans une plage de texte sélectionné.

Un troisième « piège » potentiel est que Word utilise en fait des signets en interne à de nombreuses fins. Par exemple, il les utilise pour définir des plages d’impression, mais ce n’est pas le seul endroit. Les signets définis par le système peuvent toutefois être détectés, car ils commencent toujours par un trait de soulignement. Bien que ce ne soit pas un problème dans le code précédent (puisque vous recherchez spécifiquement un signet avec un nom particulier), ce serait un problème potentiel si votre code recherche un signet. Le code suivant, écrit comme une fonction appelable, peut être utile dans une telle situation.

Function InBookmark() As Boolean     ' Returns True if the insertion point is inside     ' any non-system bookmark. Also collapses the     ' selection to an insertion point

Dim bFoundIt As Boolean     Dim J As Integer

bFoundIt = False     Selection.Collapse

For J = 1 To Selection.Bookmarks.Count         If Left(Selection.Bookmarks(J).Name) <> "_" Then             bFoundIt = True         End If     Next J

InBookmark = bFoundIt End Function

Pour utiliser cette fonction depuis votre macro, vous pouvez utiliser quelque chose d’aussi simple que ceci:

If Not InBookmark Then     ' create new bookmark End If

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites WordTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / wordribbon-WordTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

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 (6905) s’applique à Microsoft Word 2007, 2010, 2013 et 2016.