formateur informatique

Corriger les défauts dans un document en VBA Word

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Corriger les défauts dans un document en VBA Word
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 :


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,
Tabulations Word présentes en entêtes de paragraphes à supprimer

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,
Créer un nouveau module de code VBA dans un projet Word

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




Corriger tous les défauts de tabulation en entêtes de paragraphes avec une macro VBA Word

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

 
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