formateur informatique

Naviguer au travers des listes à puces d'un document

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Naviguer au travers des listes à puces d'un document
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Inscription Newsletter
Sujets que vous pourriez aussi aimer :


Parcourir un document par listes

Nous avons déjà découvert quelques techniques de navigation au sein d'un document Word grâce à des astuces de code précédentes. Ici, nous proposons à l'utilisateur de pouvoir naviguer en marquant des étapes à chaque fois qu'une liste à puces est rencontrée. Ces listes à puces représentent en effet des sections remarquables du document. Elles engagent souvent à réaliser des actions.



Document source
Pour la démonstration de cette nouvelle astuce VBA Word, nous proposons d'appuyer l'étude sur un document existant offrant un certain nombre de listes à puces harmonieusement réparties. Document Word avec listes à puces pour navigation automatisée par le code VBA

En faisant défiler le document vers le bas, bien qu'il soit court, vous constatez qu'il est effectivement copieusement garni de sections en listes à puces.

La procédure de code et le bouton
Pour débuter, nous souhaitons poser les fondations de la structure. Ce système de navigation peut s'avérer intéressant et bien utile. Nous proposons donc d'enregistrer la macro VBA dans le modèle Word, le normal.dotm. Et dans le même temps, nous suggérons de la relier à un bouton d'accès rapide à greffer dans un ruban personnalisé.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
  • Dans l'explorateur de projet, déployer le dossier Modules de l'élément Normal,
C'est lui qui représente le modèle et qui stocke tous les codes utilisables pour tous les documents Word et pas seulement pour celui en cours.
  • Puis, double cliquer sur le module Navigation,
Ainsi, nous affichons ses procédures de code VBA au centre de l'écran.

Nous avions créé ce module à l'occasion de précédentes astuces. Si vous ne le possédez pas, vous pouvez le créer par le biais du menu Insertion puis en choisissant l'option Module. Dès lors, la fenêtre Propriétés (Affichage / Fenêtre Propriétés) permet de le renommer.
  • En haut de la feuille de code, créer la procédure pointerListes comme suit :
Sub pointerListes()

End Sub


Nouvelle procédure de code VBA pour parcourir les listes à puces

La procédure existe désormais. Nous l'implémenterons dans un deuxième temps. Comme nous l'annoncions, nous souhaitons tout d'abord l'associer à un bouton à placer dans un ruban.
  • Basculer sur le document Word (ALT + Tab),
  • Cliquer droit n'importe où sur le ruban actif,
  • Dans le menu contextuel qui apparaît, choisir la commande Personnaliser le ruban,
  • Dans la boîte de dialogue qui suit, au-dessus de la première liste, déployer la zone déroulante,
  • Puis, choisir la rubrique Macros,
  • Depuis la liste, glisser la macro pointerListes dans la section Navigation du ruban Outils,
Bouton de macro VBA Word dans un ruban personnalisé

Il s'agit d'un ruban et de sa section que nous avions créés à l'occasion d'astuces précédentes. Si vous ne les possédez pas, vous pouvez les créer ou choisir de glisser la macro dans un ruban existant.
  • Cliquer alors sur le bouton Renommer en bas à droite de la boîte de dialogue,
  • Dans la boîte de dialogue qui suit, lui donner l'intitulé par Listes,
  • Puis, cliquer sur une icône représentative afin de matérialiser le bouton,
Nom et icône graphique du bouton de macro VBA Word

  • Cliquer sur le bouton Ok pour revenir sur la première boîte de dialogue,
  • Puis, valider la création du bouton de nouveau par Ok,
  • En haut de la fenêtre Word, cliquer sur l'onglet Outils pour afficher son ruban,
Comme vous pouvez l'apprécier, le bouton de macro est effectivement présent. Bien sûr, il est encore inopérant à ce stade dans la mesure où sa procédure associée est vide.



Déclarer les variables
Maintenant que la liaison est établie entre le bouton et sa procédure, il est temps de développer le code de la macro VBA. Nous avons tout d'abord besoin de deux variables. La première doit être un objet de type paragraphe pour l'employer dans une boucle VBA For Each afin de les parcourir tous. C'est dans cette boucle que nous devrons émettre un critère pour connaître la nature du paragraphe en cours d'analyse afin de déterminer s'il est porteur ou non d'une liste à puces. La seconde variable doit être utilisée pour réceptionner la valeur du bouton cliqué sur une boîte de dialogue que nous lui proposerons. Sa vocation sera de permettre à l'utilisateur de stopper la navigation pour garder actif le paragraphe de la liste à puces trouvée.
  • Revenir dans l'éditeur VBA Word (ALT + F11),
  • Dans les bornes de la procédure pointerListes, ajouter les déclarations de variables suivantes :
Sub pointerListes()
Dim parag As Word.Paragraph
Dim rep As Byte


End Sub


Nous déclarons la variable rep en tant qu'entier court. En effet, une boîte de dialogue de type MsgBox répond par une petite valeur numérique pour identifier le bouton cliqué par l'utilisateur.

Parcourir tous les paragraphes
Maintenant, pour pouvoir identifier les sections de listes à puces, nous devons pouvoir analyser chaque paragraphe. Dans certaines précédentes astuces, nous avons vu comment il était possible de les parcourir tous grâce à une boucle for each.
  • A la suite du code de la procédure, ajouter les instructions VBA suivantes :
...
Selection.HomeKey wdStory

For Each parag In ActiveDocument.Paragraphs

Next
...


Tout d'abord et pour n'en manquer aucun, nous replaçons le pointeur de lecture tout en haut du document grâce à la méthode HomeKey de l'objet VBA Selection en lui passant le paramètre wdStory qui désigne l'intégralité de la présentation. Puis, nous exploitons notre objet de type paragraphe (parag) pour les parcourir tous grâce à une boucle For Each exercée dans la collection des paragraphes du document. C'est la méthode Paragraphs de l'objet VBA Word ActiveDocument qui renvoie cette collection.



Reconnaître les listes à puces
Désormais, pour chaque paragraphe analysé tour à tour dans cette boucle, nous devons réaliser un test pour savoir s'il s'agit d'une section de liste à puces. Et pour cela, notre objet parag offre des propriétés dédiées.
  • Dans les bornes de la boucle, ajouter l'instruction conditionnelle suivante :
...
If parag.Range.ListFormat.ListType = wdListBullet Then

End If
...


Dans la hiérarchie, un objet de type paragraphe permet de descendre jusqu'à des objets enfants. En l'occurrence ici, il s'agit de l'objet Range qui désigne la plage ou la zone du paragraphe. Dès lors, cet objet offre des propriétés comme la propriété ListFormat qui permet de descendre jusqu'à la propriété enfant ListType. Comme son nom l'indique, elle est capable de déterminer la nature de la liste pour la zone analysée, si elle existe. Et c'est un paramètre VBA Word (wdListBullet) qui ne s'invente pas et qui est utilisé en critère.

Poursuivre ou stopper la navigation
Si ce critère est honoré, nous devons demander à l'utilisateur s'il souhaite poursuivre la navigation ou conserver actif le paragraphe en cours.
  • Dans les bornes de l'instruction conditionnelle, ajouter les instructions VBA suivantes :
...
parag.Range.Select
rep = MsgBox("Voulez-vous poursuivre ?", vbYesNo + vbQuestion, "Parcourir le document par listes à puces")
If (rep = 7) Then Exit For
...


C'est premièrement la méthode Select de l'objet enfant Range qui permet de sélectionner le paragraphe reconnu comme une section de liste à puces. Ensuite, nous déclenchons l'affichage d'un message (Voulez-vous poursuivre ?) dans une boîte de dialogue avec deux boutons Oui et Non (vbYesNo) accompagnés de l'icône d'un point d'interrogation (+ vbQuestion). La valeur du bouton cliqué est stockée dans la variable rep. S'il s'agit du chiffre 7, nous stoppons l'exécution de la boucle (Exit For) pour conserver actif le dernier paragraphe de liste à puces décelé.



Tester la navigation au travers des listes
Il est temps de tester cette procédure de code VBA.
  • Enregistrer les modifications (CTRL + S) et basculer sur le document Word (ALT + Tab),
  • Dans le ruban Outils, cliquer sur le nouveau bouton par Listes,
Comme vous pouvez le voir, le code s'arrête sur le premier paragraphe détecté avec une liste à puces.

Parcourir le document Word par listes à puces avec le code VBA

A chaque fois que vous cliquez sur le bouton Oui, c'est le paragraphe de la liste suivante qui est sélectionné. Et dès lors que vous cliquez sur le bouton Non, le dernier paragraphe reste actif pour stopper la navigation sur la section trouvée.

Pour une telle navigation, le code complet de la procédure VBA que nous avons bâtie reste pourtant très simple :

Sub pointerListes()
Dim parag As Word.Paragraph
Dim rep As Byte

Selection.HomeKey wdStory

For Each parag In ActiveDocument.Paragraphs
If parag.Range.ListFormat.ListType = wdListBullet Then
parag.Range.Select
rep = MsgBox("Voulez-vous poursuivre ?", vbYesNo + vbQuestion, "Parcourir le document par listes à puces")
If (rep = 7) Then Exit For
End If
Next

End Sub


 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn