Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Encadrer automatiquement les textes
Les
crochets sont plutôt fastidieux à mettre en place. Il faut les ouvrir et les fermer différemment à l'aide d'une combinaison au clavier exploitant la
touche Alt Gr . Pourtant et même si leur utilisation n'est pas coutumière, ils offrent un intérêt certain. Ils permettent de "souligner" discrètement des informations complémentaires ou explicatives. En outre, ils peuvent agrémenter subtilement un
document . L'enjeu ici est qu'un simple clic sur un
bouton de macro encadre de crochets l'expression sélectionnée sur la présentation.
Document source
Pour la démonstration de cette nouvelle
astuce VBA Word , nous proposons de récupérer un
document offrant quelques paragraphes de textes à manipuler.
Nous découvrons un document classique constitué de quelques paragraphes de textes. Certes, ils n'offrent pas d'informations complémentaires à proprement parlé et destinées à être subtilement identifiées par des crochets. Mais pour les besoins des démonstrations, nous nous en accommoderons. N'importe quelle expression fera l'affaire.
Au début du troisième paragraphe , sélectionner l'expression : thèmes et les styles ,
Si vous réalisez la sélection à la souris plutôt qu'au clavier, il y a fort à parier que l'espace de fin est inclus dans la plage. Mais ce n'est pas grave. Nous devons monter un petit
code VBA Word capable de s'adapter au contexte.
Encadrer la sélection
Comme cet automatisme à monter peut s'avérer intéressant dans de multiples contextes, nous proposons de créer la
procédure de code VBA dans le
modèle Word , le
Normal.dotm .
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word ,
Dans l'explorateur de projet sur la gauche, cliquer sur l'élément Normal pour le sélectionner,
C'est lui qui représente le
modèle Word . Au cours des différentes
astuces , nous avons développé un certain nombre de
modules . Et pour accueillir cette nouvelle procédure, nous choisissons le
module Formats . Il permet d'influer sur l'apparence des textes sélectionnés. Si vous ne disposez d'aucun
module , vous devez en créer un (Menu Insertion / Module).
Dans la page de code du module au centre, créer la procédure encadrer ,
Sub encadrer()
End Sub
Puis, dans les bornes de la procédure , ajouter les trois instructions VBA suivantes :
Sub encadrer()
Selection. InsertAfter "]"
Selection.InsertBefore "["
Selection.MoveRight wdCharacter, 1
End Sub
Nous connaissons bien désormais les
méthodes InsertAfter et
InsertBefore de l'
objet VBA Selection . Comme leurs noms l'indiquent, elles permettent respectivement d'insérer du texte
après et avant la sélection . Et ce texte est passé en paramètre. Dans le premier cas, il s'agit d'un
crochet fermant . Dans le second, il s'agit d'un
crochet ouvrant . En d'autres termes, ces deux instructions devraient avoir suffi pour encadrer le texte de la sélection entre crochets. Puis, nous exploitons la
méthode MoveRight du même
objet Selection pour engager un déplacement du point d'insertion vers la droite. Avec le premier paramètre (wdCharacter), nous définissons l'unité de déplacement sur le caractère. Avec la valeur 1 en second argument, nous engageons un déplacement d'un caractère vers la droite. Bref, nous replaçons le point d'insertion juste après le texte sélectionné.
Enregistrer les modifications (CTRL + S) puis exécuter le code (F5),
Ensuite, basculer sur le document Word (ALT + Tab),
Comme vous pouvez le voir, le texte préalablement sélectionné est effectivement encadré de crochets.
Mais dans le cas où la sélection n'est pas suffisamment précise, incluant l'espace consécutif, celui-ci est considéré dans l'expression à encadrer.
Supprimer l'espace de fin résiduel
Pour plus de sureté et de souplesse, nous proposons de supprimer le potentiel espace situé à la fin de la sélection avant d'ajouter les
crochets . Pour cela, il suffit de tester le dernier caractère grâce à la
fonction VBA Right . S'il s'agit d'un
espace , nous devons contracter la sélection d'une unité vers la gauche.
Au début du deuxième paragraphe, sélectionner l'expression : "aspect professionnel ",
Pour les démonstrations à venir, il est cette fois important d'englober dans la sélection l'espace placé après le mot professionnel.
Revenir dans l'éditeur VBA Word ,
Dans la procédure et avant les instructions précédentes, ajouter le code VBA suivant :
Sub encadrer()
If (Right(Selection.Text, 1) = " ") Then
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
Selection.InsertAfter "]"
Selection.InsertBefore "["
Selection.MoveRight wdCharacter, 1
End Sub
Le test est donc réalisé par une
instruction conditionnelle (If). Et si le critère est vérifié, donc si l'espace est trouvé en bout de chaîne (= " "), alors nous exploitons la
méthode MoveLeft de l'
objet VBA Selection . Mais notez cette fois la présence importante du troisième paramètre (wdExtend). Avec cette valeur, nous étendons la sélection ou plutôt nous la contractons d'un caractère vers la gauche ici. De cette manière, nous excluons l'espace résiduel de la sélection proposée par l'utilisateur.
Enregistrer les modifications (CTRL + S), exécuter le code (F5) et basculer sur le document,
Comme vous pouvez l'apprécier, les crochets encadrent seulement l'expression. Grâce au
code VBA , l'espace résiduel a automatiquement été exclu. C'est tout l'intérêt de la
programmation . L'utilisateur peut s'autoriser quelques approximations pour une exploitation plus souple de la solution.
Etendre la sélection
Nous proposons maintenant de gérer un autre cas spécifique. Il intervient lorsque l'utilisateur n'émet
aucune sélection mais déclenche tout de même l'
exécution de la macro . Nous pourrions nous contenter d'intercepter cette exception et d'ordonner l'arrêt du traitement. Mais comme le point d'insertion est vraisemblablement placé au beau milieu d'un mot, nous souhaitons étendre la sélection de manière à l'englober intégralement. De cette manière, il sera naturellement encadré de crochets malgré l'absence de consignes précises.
Sur la deuxième ligne du troisième paragraphe, cliquer n'importe où dans le mot SmartArt ,
De cette manière, nous y plaçons le point d'insertion de façon aléatoire.
Revenir dans l'éditeur VBA Word (Alt + Tab),
Au début de la procédure , ajouter l'instruction conditionnelle suivante :
Sub encadrer()
If (Selection.Characters.Count = 1) Then
End If
If (Right(Selection.Text, 1) = " ") Then
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
Selection.InsertAfter "]"
Selection.InsertBefore "["
Selection.MoveRight wdCharacter, 1
End Sub
Elle ne doit donc pas englober les précédents traitements que nous gardons en dehors et en bas du code de la procédure. Son rôle est de traiter le cas spécifique où aucune sélection n'est définie pour deviner automatiquement le mot à encadrer. C'est la raison pour laquelle nous exploitons la
propriété Count . Ainsi associée à la
collection Characters de l'
objet Selection , elle retourne le
nombre de caractères contenus dans la sélection. Et le critère à vérifier (= 1) est sans appel. Il est honoré lorsqu'aucune sélection n'est définie par l'utilisateur.
Nous allons donc maintenant devoir remonter caractère à caractère jusqu'à l'espace situé devant le mot où réside le point d'insertion. Dès lors, nous devrons
étendre la sélection vers la droite, toujours caractère à caractère, jusqu'à atteindre l'espace situé juste après ce mot.
Dans les bornes de l'instruction conditionnelle , créer la boucle While suivante :
Sub encadrer()
If (Selection.Characters.Count = 1) Then
While Left(Selection.Text, 1) <> "" And Left(Selection.Text, 1) <> Chr(13)
Selection.MoveLeft wdCharacter, 1, wdExtend
Wend
End If
If (Right(Selection.Text, 1) = " ") Then
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
Selection.InsertAfter "]"
Selection.InsertBefore "["
Selection.MoveRight wdCharacter, 1
End Sub
C'est un double critère que nous exploitons pour poursuivre le traitement. Tant que le premier caractère de la chaîne n'est pas un espace (Left(Selection.Text, 1) <> " ") et tant qu'il ne s'agit pas non plus d'un retour à la ligne (Left(Selection.Text, 1) <> Chr(13)), alors nous continuons d'étendre la sélection d'une unité vers la gauche (Selection.MoveLeftwdCharacter, 1, wdExtend).
En revanche, dès qu'un espace sera rencontré, la
boucle While mettra fin à son traitement. Nous serons donc arrêtés sur une sélection dont le premier caractère est un espace. Pour sélectionner intégralement le mot à encadrer, nous devons replacer le point d'insertion juste devant le mot puis étendre la sélection vers la droite jusqu'à rencontrer l'espace de fin.
A la suite du code de l'instruction conditionnelle , ajouter les lignes VBA suivantes :
Sub encadrer()
If (Selection.Characters.Count = 1) Then
While Left(Selection.Text, 1) <> " " And Left(Selection.Text,1) <> Chr(13)
Selection.MoveLeft wdCharacter, 1, wdExtend
Wend
Selection.MoveLeft wdCharacter, 1
Selection.MoveRight wdCharacter, 1
While Right(Selection.Text, 1) <> " " And Right(Selection.Text,1) <> Chr(13)
Selection.MoveRight wdCharacter, 1, wdExtend
Wend
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
If (Right(Selection.Text, 1) = " ") Then
Selection.MoveLeft wdCharacter, 1, wdExtend
End If
Selection.InsertAfter "]"
Selection.InsertBefore "["
Selection.MoveRight wdCharacter, 1
End Sub
Tout d'abord, nous positionnons le point d'insertion juste devant l'espace (Selection.MoveLeft wdCharacter, 1) puis juste après (Selection.MoveRightwdCharacter, 1). De fait, nous sommes placés juste devant le mot à encadrer. C'est pourquoi nous engageons une nouvelle
boucle While . Elle doit étendre la sélection vers la droite jusqu'à ce que le dernier caractère rencontré soit un espace ou un retour à la ligne (Selection.MoveRight wdCharacter, 1, wdExtend). Lorsque l'espace de fin est effectivement atteint, la boucle stoppe son traitement. C'est pourquoi juste après, nous restreignons la sélection d'une unité vers la gauche (Selection.MoveLeft wdCharacter, 1,wdExtend) afin d'exclure cet espace.
Enregistrer les modifications, exécuter le code puis basculer sur le document,
Comme vous pouvez le voir, même dans ce contexte particulier, notre procédure sait s'adapter pour trouver le terme Ã
encadrer automatiquement de crochets . Bien sûr et comme nous l'avons démontré à maintes reprises dans des astuces passées, il conviendrait maintenant d'associer cette procédure à un bouton de macro à greffer dans l'un des rubans en haut de la fenêtre Word.