Mis à jour le jeudi 5 décembre 2013
  • 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

TP : Créer ses propres macros et codes VBA

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Nous allons terminer cet ouvrage en définissant une macro qui assurera la mise en page complète d'un texte d'une dizaine de pages tiré des Fables de Jean de La Fontaine. Outre la définition de cette macro, et donc la mise en pratique du chapitre précédent, vous réviserez plusieurs techniques qui vous ont été révélées tout au long du livre.

Alors, impatients de tester tout ce que vous avez appris ? Ne tardons pas, commençons !

Instructions pour réaliser le TP

La mise en forme automatique de documents, vous en rêviez ? Ce livre vous montre comment y arriver ! Là, je crois que j'en fais un peu trop. Quoi que… Imaginez qu'il soit possible de mettre en forme la totalité d'un document en cliquant sur une icône. C'est ce que nous allons réaliser dans ce chapitre.

Afin de vous montrer de quoi je parle exactement, je vous conseille de comparer la figure suivante, qui représente le document à mettre en page, avec la figure suivante qui représente le document une fois mis en page. Avouez quand même que la différence saute aux yeux !

Extrait du document sans mise en page
Extrait du document sans mise en page
Extrait du document avec mise en page
Extrait du document avec mise en page

Arrivés à ce stade du livre, vous devriez être capables d'obtenir à peu près le même résultat que moi. Je ne vous demande pas un document identique, l'intérêt de ce TP n'est pas là. Le but est de modifier intégralement l'aspect d'un document en appuyant sur une seule et unique icône.

À moins que vous ne soyez prêts à saisir le texte des dix premières fables de La Fontaine, je vous suggère d'utiliser le code web suivant pour passer tout de suite à des choses plus intéressantes.

Télécharger les fables

Vous aurez également besoin d'une image pour ajouter un filigrane au document. Je vous suggère de télécharger celle du code web ci-dessous mais libre à vous d'en choisir une autre.

Télécharger l'image

Je ne vous en dis pas plus, c'est à vous de jouer. Et si vous n'y arrivez pas, n'ayez aucune inquiétude : la correction arrive.

Correction

J'espère que tout s'est bien passé pour vous. Si vous avez éprouvé des difficultés sur un point particulier, n'hésitez pas à vous reporter à la section correspondante. Vous pouvez aussi choisir de lire la correction du début à la fin ou encore de refaire (ou de faire) la macro en suivant toutes les étapes expliquées dans la correction.

Après avoir ouvert le document, sélectionnez le premier paragraphe et cliquez sur l'icône Couper (dans le groupe Presse-papiers, sous l'onglet Accueil du Ruban). Ce texte vous servira dans la définition de l'en-tête. Basculez ensuite sur l'onglet Développeur, cliquez sur Enregistrer une macro, donnez lui un nom approprié (pour ma part j'ai choisi Mise_en_page) et validez en cliquant sur OK. Je suis sûr que vous avez tous pensé à le faire, mais un rappel ne fait jamais de mal !

Ajouter un en-tête

Basculez sur l'onglet Insertion du Ruban, cliquez sur l'icône En-tête dans le groupe En-tête et pied de page et choisissez Modifier l'en-tête. Appuyez sur les touches Ctrl + V pour insérer dans l'en-tête le contenu du presse-papiers, c'est-à-dire le titre
du document. Basculez sur l'onglet Accueil et cliquez sur l'icône Centrer dans le groupe Paragraphe pour centrer l'en-tête sur la largeur du document. Cliquez enfin sur l'icône Fermer l'en-tête et le pied de page dans le groupe Fermer, sous l'onglet Création du Ruban. Vous devriez obtenir quelque chose de similaire à la figure suivante.

L'en-tête a été défini
L'en-tête a été défini

Changer les Titre 2

Pour ce TP, j'ai changé les Titre 2 en caractères Arial Black, 16 points, souligné double, centré, mais vous êtes libres de choisir une autre mise en forme.

Basculez sur l'onglet Accueil du Ruban. Cliquez sur l'icône Remplacer du groupe Modification. Si la boîte de dialogue Rechercher et remplacer n'est pas déployée, cliquez sur Plus. Dans l'angle inférieur gauche de la boîte de dialogue, cliquez sur Format, sélectionnez Style, choisissez Titre 2 et validez en cliquant sur OK.
Cliquez dans le champ Remplacer par. Cliquez sur Format puis sur Police. Choisissez la police Arial Black et la taille 16. Choisissez un soulignement double dans la liste déroulante Soulignement puis validez en cliquant sur OK.
Cliquez sur Format puis sur Paragraphe. Sélectionnez Centré dans la liste déroulante Alignement puis validez en cliquant sur OK.
Si vous avez suivi nos consignes, la boîte de dialogue Rechercher et remplacer doit maintenant ressembler à la figure suivante.

La boîte de dialogue Rechercher et remplacer est prête pour le remplacement des styles Titre 2
La boîte de dialogue Rechercher et remplacer est prête pour le remplacement des styles Titre 2

Cliquez sur Remplacer tout. Validez en cliquant sur OK puis refermez la boîte de dialogue Rechercher et remplacer.

Remplacer le style Normal

Pour ce TP, j'ai changé le style Normal par du Arial Corps 13 Espace après 0

Cliquez sur l'icône Remplacer dans le groupe Modification, sous l'onglet Accueil du Ruban. Le point d'insertion clignote dans le champ Rechercher. Les réglages effectués à l'étape précédente étant toujours mémorisés, cliquez sur Sans attribut pour les annuler. Cliquez sur Format puis sur Style. Sélectionnez le style Normal et validez en cliquant sur OK.
Cliquez dans le champ Remplacer par. Cliquez sur Sans attribut pour effacer les réglages de l'étape précédente. Cliquez sur Format puis sur Police. Choisissez la police Arial, taille 13, puis validez en cliquant sur OK. Cliquez sur Format puis sur Paragraphe. Tapez 0 pt dans le champ Après et validez en cliquant sur OK. La boîte de dialogue Rechercher et remplacer doit maintenant ressembler à la figure suivante.

La boîte de dialogue Rechercher et remplacer est prête pour le remplacement des styles Normal
La boîte de dialogue Rechercher et remplacer est prête pour le remplacement des styles Normal

Cliquez sur Remplacer tout puis sur OK ; refermez alors la boîte de dialogue Rechercher et remplacer.

Insérer un filigrane

Il vous faut basculer sur l'onglet Mise en page, cliquez sur l'icône Filigrane (groupe Arrière-plan de page) et choisissez Filigrane personnalisé. Dans la boîte de dialogue Filigrane personnalisé, sélectionnez Image en filigrane et désignez votre image. Cliquez sur OK pour valider, comme indiqué à la figure suivante.

Insertion du filigrane image
Insertion du filigrane image

Insérer une lettrine

Pour ce TP, j'ai ajouté une lettrine sur la première lettre qui suit chaque Titre 2.

Basculez sur l'onglet Accueil. Dans le groupe Modification, cliquez sur la flèche à droite de l'icône Rechercher puis sélectionnez Recherche avancée. Cliquez sur Format puis sur Style. Choisissez Titre 2 et validez en cliquant sur OK. Cliquez sur Suivant et refermez la boîte de dialogue Rechercher et remplacer. Appuyez sur la flèche de droite de votre clavier pour passer après le saut de paragraphe de style Titre 2. Maintenez enfoncée la touche Maj puis appuyez à nouveau sur la flèche de droite de votre clavier pour sélectionner le premier caractère.

Basculez sur l'onglet Insertion du Ruban. Dans le groupe Texte, cliquez sur l'icône Lettrine puis choisissez Dans le texte, comme à la figure suivante.

Insertion d'une lettrine
Insertion d'une lettrine

Vous pouvez arrêter l'enregistrement de la macro. Basculez sur l'onglet Développeur et cliquez sur l'icône Arrêter l'enregistrement.
Vous vous doutez que le travail n'est pas fini. Il faut maintenant intervenir dans le code VBA généré par l'enregistreur de macros pour répéter l'insertion d'une lettrine autant de fois que nécessaire.
Basculez sur l'onglet Développeur du Ruban, cliquez sur l'icône Macros du groupe Code, sélectionnez la macro Mise en page puis cliquez sur Modifier. Identifiez le dernier bloc d'instructions (celui qui est responsable de l'insertion de la lettrine) et modifiez le code pour obtenir ceci :

While (a <> 1)
        With Selection.Find
            .Text = ""
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute
        If Not (Selection.Find.Found) Then
            a = 1
        Else
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
            With Selection.Paragraphs(1).DropCap
                .Position = wdDropNormal
                .FontName = "Arial"
                .LinesToDrop = 3
                .DistanceFromText = CentimetersToPoints(0)
            End With
            Selection.MoveRight Unit:=wdCharacter, Count:=1
        End If
    Wend
End Sub

Si les modifications ne vous sautent pas aux yeux, voici ce qui a changé :

  1. Une instruction While vient devant l'instruction With Selection.Find.

  2. Le paramètre .Wrap a été initialisé à wdFindAsk.

  3. Trois lignes ont été ajoutées à la suite de l'instruction Selection.Find.Execute.

  4. Deux lignes ont été ajoutées avant le End Sub.

Encore quelques précisions : le dernier bloc d'instructions est exécuté tant que la variable a est différente de 1. Étant donné qu'elle n'a pas été définie, elle n'a aucune valeur et, jusqu'à preuve du contraire, « rien » est toujours différent de 1. La boucle peut donc s'exécuter au moins une fois.

À la suite de l'instruction Selection.Find.Execute, responsable de la recherche du paragraphe de style Titre 2, l'instruction Selection.Find.Found indique si un tel paragraphe a été trouvé. Dans le cas contraire (If Not (Selection.Find.Found)), la variable est initialisée à 1 (Then a=1) :

If Not (Selection.Find.Found) Then  a = 1

Si un paragraphe de style Titre 2 est trouvé, la suite du code (Else) peut s'exécuter.

Les dernières instructions ajoutées ferment les instructions If (End If) et While (Wend).

Pour terminer, le paramètre .Wrap de l'instruction With Selection.Find est initialisé à wdFindAsk pour que le code prenne fin lorsque la totalité du document aura été décrite :

.Wrap = wdFindAsk

La touche finale

Pour rendre la macro facilement accessible, vous allez définir une icône dans la barre d'outils Accès rapide. Cliquez sur l'icône Personnaliser la barre d'outils Accès rapide et, dans le menu, sélectionnez Autres commandes. Dans la boîte de dialogue Options Word, sélectionnez Macros dans la première liste déroulante (1), choisissez la macro Normal.NewMacros.Mise_en_page dans la première zone de liste (2) puis cliquez sur Ajouter (3). Cliquez sur Modifier et choisissez une des icônes proposées (4). Cliquez enfin sur OK pour valider l'insertion de l'icône dans la barre d'outils Accès rapide (5), comme indiqué à la figure suivante.

Définition d'une icône pour la macro dans la barre d'outils Accès rapide
Définition d'une icône pour la macro dans la barre d'outils Accès rapide

Si cela vous intéresse, je mets à votre disposition le code VBA de cette macro, même si vous ne devriez normalement pas en avoir besoin : il suffit de suivre mes indications pour y arriver. ;-)

'
' Mise_en_page Macro
'
'
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Titre 2")
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Size = 16
        .Underline = wdUnderlineDouble
    End With
    With Selection.Find.Replacement.ParagraphFormat
        .SpaceBeforeAuto = False
        .SpaceAfterAuto = False
        .Alignment = wdAlignParagraphCenter
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Normal")
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Font.Size = 13
    With Selection.Find.Replacement.ParagraphFormat
        .SpaceBeforeAuto = False
        .SpaceAfter = 0
        .SpaceAfterAuto = False
        .LineUnitAfter = 0
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    ActiveDocument.Sections(1).Range.Select
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.HeaderFooter.Shapes.AddPicture(FileName:= _
        "C:\Data\jean-de-la-fontaine.jpg", LinkToFile:=False, SaveWithDocument:= _
        True).Select
    Selection.ShapeRange.Name = "WordPictureWatermark24773234"
    Selection.ShapeRange.PictureFormat.Brightness = 0.85
    Selection.ShapeRange.PictureFormat.Contrast = 0.15
    Selection.ShapeRange.LockAspectRatio = True
    Selection.ShapeRange.Height = CentimetersToPoints(17.01)
    Selection.ShapeRange.Width = CentimetersToPoints(15.99)
    Selection.ShapeRange.WrapFormat.AllowOverlap = True
    Selection.ShapeRange.WrapFormat.Side = wdWrapNone
    Selection.ShapeRange.WrapFormat.Type = 3
    Selection.ShapeRange.RelativeHorizontalPosition = _
        wdRelativeVerticalPositionMargin
    Selection.ShapeRange.RelativeVerticalPosition = _
        wdRelativeVerticalPositionMargin
    Selection.ShapeRange.Left = wdShapeCenter
    Selection.ShapeRange.Top = wdShapeCenter
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Selection.Find.ClearFormatting
    Selection.Find.Style = ActiveDocument.Styles("Titre 2")
    
    While (a <> 1)
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    
    If Not (Selection.Find.Found) Then
        a = 1
    Else
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    With Selection.Paragraphs(1).DropCap
        .Position = wdDropNormal
        .FontName = "Arial"
        .LinesToDrop = 3
        .DistanceFromText = CentimetersToPoints(0)
    End With
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    End If
    Wend
End Sub

Nous voici arrivés au terme de ce tutoriel. Vous y avez certainement découvert plusieurs facettes cachées de votre traitement de texte. J'espère en particulier vous avoir convaincus que Word est un logiciel puissant, complet et vraiment abordable pour peu qu'on lui accorde un peu de temps. Auriez-vous pensé que vous pouviez supprimer l'arrière-plan d'une image, poster des articles dans votre blog ou encore insérer des captures d'écran sans quitter Word ?

Pour tirer pleinement parti de votre nouveau traitement de texte, je ne peux que vous encourager à l'utiliser aussi souvent que possible. La pratique, il n'y a que ça de vrai ! Bonne continuation et… à bientôt dans un nouveau tutoriel.

Exemple de certificat de réussite
Exemple de certificat de réussite