Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Corriger les défauts d'un document Word
Au fil des étapes, nous progressons avec le
VBA Word. Il est temps désormais de passer aux choses sérieuses. Ici, nous allons découvrir une technique pour
automatiser la correction globale des défauts dans un
document Word.
Document source
Pour la mise en place de ce sujet, nous suggérons de récupérer un
document Word relativement volumineux et hébergeant des anomalies de mise en page.
Nous avons travaillé sur ce document au cours des deux volets précédents. Les deux premières pages correspondent respectivement à la page de garde et au sommaire. Le contenu débute à partir de la troisième page.
- Faire défiler le document jusqu'à atteindre la troisième page,
En affichant les caractères invisibles (
Bouton Afficher tout dans la
section Paragraphe du
ruban Accueil), vous voyez les premiers défauts apparaître. Des
tabulations sont présentes au départ de certains
paragraphes. Comme nous l'avons appris au travers de différentes
formations sur Word, les
tabulations doivent être utilisées pour réaliser des
alignements fractionnés à l'intérieur même des lignes, mais pas au début. Le
décalage d'un paragraphe doit nécessairement se faire par un
retrait. En l'occurrence ici, comme seule la première ligne du
paragraphe est concernée, c'est un
retrait de première ligne qui doit être enclenché.
Rechercher et remplacer
Dans cette étape, nous souhaitons corriger sommairement ces défauts. L'idée est de pouvoir supprimer ces
tabulations, dès lors que nous avons la certitude qu'elles sont bien positionnées en entêtes de
paragraphes. Si d'aventures d'autres existaient à l'intérieur des lignes, elles ne devraient pas être touchées. Nous pourrions imaginer parcourir tous les paragraphes du document. C'est d'ailleurs une technique que nous allons bientôt apprendre. Mais une
astuce lumineuse consiste à rechercher ce caractère remarquable pour le remplacer par un autre et ce, dans
tout le document. Et pour cela, l'
objet VBA Selection, décidément encore lui, propose une propriété totalement dévouée. Elle se nomme
Find.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
- Dans l'explorateur de projet sur la gauche, cliquer sur le projet Corriger-les-defauts,
La solution que nous apportons est spécifique. C'est la raison pour laquelle nous choisissons de l'attacher au document en cours pour ne pas engorger le
modèle normal.dotm.
- En haut de l'éditeur, cliquer sur le menu Insertion,
- Dans les propositions, choisir de créer un nouveau module,
C'est lui qui doit accueillir la
procédure de code VBA à développer. Le
nouveau module apparaît dans un dossier lui-même nommé
Modules. Sa feuille de code apparaît au centre de l'écran.
- Dans cette feuille de code, créer la procédure Corriger, comme suit :
Sub Corriger()
End Sub
- Dans les bornes de cette procédure, ajouter la première ligne de code suivante :
Selection.HomeKey wdStory
Nous connaissons bien cette technique désormais. Avec la valeur
wdStory passée à la
méthode HomeKey de l'
objet Selection, nous commençons par replacer le point d'insertion tout en haut du
document. En effet, le
paramètre wdStory désigne l'article complet, soit le
document en cours. Ainsi, nous pourrons débuter la recherche à partir du début. D'ailleurs si vous exécutez le code avec la touche F5 du clavier, vous pourrez constater que le point d'insertion est bien repositionné sur la toute première ligne de la page de garde.
- Dans la procédure et à la suite du code, ajouter la ligne VBA suivante :
Selection.Find.Text = "^p^t"
L'
attribut Text de la
propriété Find de l'
objet Selection permet de définir l'occurrence cherchée, afin bien sûr de la remplacer. Nous le disions, nous souhaitons corriger les tabulations certes, mais uniquement pour celles qui se trouvent en
début de paragraphe. Elles sont donc précédées d'un saut de paragraphe. Et c'est le
code ^p qui matérialise cette rupture. Quant au
code ^t vous l'avez compris, il matérialise une
tabulation dans l'enchaînement de ce saut.
Nous devons maintenant définir quel est le texte de remplacement. Et pour cela, des propriétés sont dédiées.
- A la suite du code, ajouter l'instruction VBA suivante :
Selection.Find.Replacement.Text = "^p"
C'est donc l'
attribut Text de la
propriété Replacement de l'
objet Selection qui permet de définir le texte à utiliser pour remplacer celui qui est cherché. En remplaçant une
marque de paragraphe suivie d'une
tabulation par une simple
marque de paragraphe, nous supprimerons tout simplement la
tabulation.
Il ne reste plus qu'à exécuter l'action consistant à engager ce remplacement de masse.
- A la suite du code, ajouter l'instruction VBA suivante :
Selection.Find.Execute Replace:=wdReplaceAll
La
méthode Execute de la
propriété Find de l'
objet Selection offre de nombreux arguments. Pour atteindre celui qui nous intéresse, la méthode de remplacement, nous sommes donc obligés de renseigner son libellé (Replace:=) en préfixe. De cette manière, nous ne sommes pas dans l'obligation de renseigner les autres.
- Enregistrer les modifications (CTRL + S) puis exécuter le code VBA (F5),
- Ensuite, basculer sur le document (ALT + Tab) et faire défiler les pages vers le bas,
Comme vous pouvez le constater, tous les défauts en entêtes de paragraphes ont été automatiquement supprimés avec une routine dont le code reste très simple :
Sub Corriger()
Selection.HomeKey wdStory
Selection.Find.Text = "^p^t"
Selection.Find.Replacement.Text = "^p"
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Néanmoins et nous avons déjà abordé le sujet, si ce code peut être optimisé, il doit l'être. L'
objet Selection et sa
propriété Find sont répétés à trois reprises. Cette répétition doit disparaître pour regrouper toutes les dépendances dans un
bloc With, comme suit :
Sub Corriger()
Selection.HomeKey wdStory
With Selection.Find
.Text = "^p^t"
.Replacement.Text = "^p"
.Execute Replace:=wdReplaceAll
End With
End Sub
Remarque et pour finir : Par le
code VBA, nous pilotons les fonctionnalités de la
boîte de recherche Word. Pour éviter de voir apparaître les alertes et messages de confirmation à l'issue du traitement, il suffit d'exploiter la
propriété DisplayAlerts de l'
objet Application en entête de côde de la procédure :
Application.DisplayAlerts = wdAlertsNone