Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Aérer automatiquement la présentation
A l'occasion d'une précédente
astuce VBA Word nous avons appris Ã
parcourir tous les paragraphes d'un document grâce à une
boucle For Each. Avec cette nouvelle astuce, nous allons voir qu'il est possible de parcourir l'intégralité d'un
document Word grâce à une
boucle For Next classique. L'idée est de pouvoir engager des traitements sur la totalité de l'article. Pour l'exemple, nous allons nous contenter d'
aérer la présentation en ajoutant automatiquement un
paragraphe vierge entre chaque paragraphe de texte.
Document source
Pour la découverte de cette nouvelle
astuce, nous proposons d'appuyer les travaux sur un
document hébergeant des
blocs de paragraphes compacts.
Nous découvrons effectivement un article compact. Ses
paragraphes ont été
insérés automatiquement grâce à l'une des fonctions que propose
Word à ce sujet.
Coder dans le modèle
Comme cette
macro Word peut s'avérer utile pour de nombreuses présentations, nous proposons de créer une procédure dans le
modèle Word. C'est ainsi que la
macro sera disponible pour tous les documents.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
- Dans l'explorateur de projet sur la gauche de l'écran, cliquer sur l'élément Normal,
C'est lui qui désigne le modèle (Normal.dotm).
- En haut de la fenêtre, cliquer sur le menu Insertion,
- Dans les propositions, choisir la commande Module,
Nous créons ainsi un nouveau module pour accueillir notre
code VBA. Il est toujours judicieux d'attribuer des noms explicites à ces modules, surtout quand leur nombre augmente. Lorsque le module est sélectionné, c'est la
propriété Name de la
fenêtre Propriétés qui permet de changer ce nom. Si elle n'est pas visible dans votre environnement, vous pouvez la rendre disponible par le
menu Affichage puis en cliquant sur
Fenêtre Propriétés.
- Dans la feuille de code au centre de l'écran, créer la procédure Aerer, comme suit :
Sub Aerer()
End Sub
Déclarer les variables
Désormais et comme il est de coutume, nous devons commencer par
déclarer les variables nécessaires au bon fonctionnement de la procédure.
Sub Aerer()
Dim nbParag As Integer: Dim texteParag As String: Dim j As Integer
End Sub
La
variable nbParag est déclarée comme un entier. Nous l'utiliserons pour stocker le nombre de paragraphes que possède le document à traiter. Cette information est incontournable pour que la boucle sache jusqu'où poursuivre son traitement. La
variable texteParag est déclarée comme un texte. Nous l'utiliserons pour stocker temporairement le contenu du paragraphe en cours d'analyse. Ainsi, nous pourrons lui ajouter un retour à la ligne pour le remplacer dans le document. C'est de cette manière que nous allons pouvoir intercaler une ligne vide entre chaque paragraphe. Enfin,
j est la variable de boucle à utiliser pour le traitement récursif.
- A la suite du code de la procédure, ajouter l'affectation suivante :
Sub Aerer()
Dim nbParag As Integer: Dim texteParag As String: Dim j As Integer
nbParag = (ActiveDocument.Paragraphs.Count * 2) - 2
End Sub
La
propriété Paragrahs de l'
objet VBA Word ActiveDocument renvoie une collection matérialisant tous les paragraphes sous la forme d'un tableau. De fait, sa
propriété Count retourne le
nombre de paragraphes contenus dans le document. Naturellement, nous doublons ce décompte (*2), puisque nous allons ajouter un paragraphe sur 2. Sans ce réajustement, la
boucle que nous devons entreprendre arrêterait sont traitement à la moitié du document remanié. Nous retranchons néanmoins deux unités à ce résultat (-2). En effet, il n'est pas question d'ajouter un paragraphe vierge après le dernier paragraphe qui dans ce décompte virtuel est devenu l'avant dernier, soit -1-1 pour arrêter le traitement sur l'antépénultième.
Parcourir les paragraphes
Maintenant que nous connaissons les bornes, nous pouvons enclencher la
boucle permettant de
parcourir tous les paragraphes du document sans omettre ceux que nous allons ajouter pour aérer la présentation.
- A la suite du code de la procédure, ajouter la boucle suivante :
Sub Aerer()
Dim nbParag As Integer: Dim texteParag As String: Dim j As Integer
nbParag = (ActiveDocument.Paragraphs.Count * 2) - 2
For j = 1 To nbParag
j = j + 1
Next j
End Sub
Bien sûr elle n'est pas complétée puisqu'il manque son traitement. Elle est initialisée pour démarrer l'analyse à partir du premier paragraphe (j=1) et la poursuivre jusqu'au dernier (nbParag), en tous cas jusqu'à l'antépénultième comme nous l'avons expliqué. Et Ã
chaque passage dans la boucle, après le traitement à intégrer, nous incrémentons la variable d'une unité qui va être augmentée dans la foulée d'une nouvelle unité par la boucle elle-même. C'est de cette façon que nous portons l'étude sur un paragraphe sur deux, pour ignorer les paragraphes vides que nous allons insérer.
- Dans les bornes de la boucle, ajouter les deux instructions suivantes avant l'incrémentation,
Sub Aerer()
Dim nbParag As Integer: Dim texteParag As String: Dim j As Integer
nbParag = (ActiveDocument.Paragraphs.Count * 2) - 2
For j = 1 To nbParag
texteParag = ActiveDocument.Paragraphs(j).Range.Text
ActiveDocument.Paragraphs(j).Range.Text = texteParag & Chr(13)
j = j + 1
Next j
End Sub
Nous l'avons évoqué précédemment, la
propriété Paragraphs est un
tableau des paragraphes contenus dans le document. C'est la raison pour laquelle nous lui passons la
variable de boucle en paramètre, pour pointer sur celui qui doit être analysé dans la chronologie. Grâce à la
propriété dérivée Text de sa
propriété Range, nous stockons son contenu dans la
variable texteParag.
Dès lors, par affectation inverse, nous remplaçons ce contenu par ce même contenu auquel nous avons greffé un retour à la ligne grâce à la
fonction VBA Chr à laquelle nous passons la valeur 13.
- Enregistrer les modifications (CTRL + S) et exécuter le code (F5),
- Puis, basculer sur le document Word.
Comme vous pouvez l'apprécier, la présentation a effectivement été aérée de façon automatisée. Une ligne vide a bien été intercalée entre chaque paragraphe de texte. Nous avons donc démontré avec succès une nouvelle technique pour parcourir un à un tous les paragraphes d'un document Word.