Exécutez du code VBA Word lors d'événements
tels que Print ou Save
Programmeurs avancés uniquement !
Lorsque vous êtes dans Excel, vous avez
la possibilité de créer du code VBA sur presque n'importe quel
événement... Ils sont pléthoriques :

Mais dans Word, c'est une autre histoire...
Il n'y a pas grand chose à se mettre sous la dent...

Il semblerait que la raison en soit que lorsqu'on travaille dans
Word, Word perd un temps non négligeable à rechercher sans arrêt
en vain s'il n'existe pas telle ou telle procédure d'événement...
Est-ce que le sprogrammeurs d'Excel pensent autrement ? Je n'en sais rien...
Admettons que j'ai besoin de créer un modèle qui
exécutera une procédure VBA lorsque j'enregistre et que j'imprime.
Ces deux événements, pourtant bien pratiques, sont absents de
la liste des événements possibles.
Téléchargez
le modèle terminé ici | Je
me suis inspiré de cette page pour concevoir ce didacticiel
Marche à suivre
- Lancez Word
- Enregistrez directement le document blanc sous le nom de MODELE : ModeleAvecEvenement.dot
- Allez dans l'environnement VBA (Alt-F11)
- Créez un nouveau Module de classe (Bouton droit de la souris)

- Nommez-le ClasseEvenement
(Menu Affichage/Fenêtre propriétés)

- Dans son code, copiez-y ceci :
Public WithEvents ModeleEvenement
As Word.Application

- Dans la liste déroulante du haut, choisissez "ModeleEvenement"

- Dans la liste de droite, nous avons maintenant l'heureuse surprise de constater
qu'il y a maintenant plein d'événements intéressants
! Choisissez DocumentBeforeSave

- Choisissez ensuite DocumentBeforePrint,
et DocumentBeforeClose.
Ca crée les événements correspondants :

- Rajoutez les codes suivants pour qu'on puisse tester tout à l'heure,
quand ce sera fini, la bonne exécution au bon moment de ces événements
:
- Enregistrez votre modèle par sécurité.
- Cliquez deux fois sur "ThisDocument" pour faire apparaître
le module correspondant à côté. Choisissez "Document"
dans la liste déroulante

- Ca fait automatiquement apparaître l'événement prédéfini
"New" (Cet événement serait apparu même si on
n'avait rien fait de ce qu'on a fait avant : c'est vraiment un des rares événements
possibles de Word).
- Appelez-y la procédure CreationEvenement
Private
Sub Document_New()
Set GestionEvenement = New ClasseEvenement
Set GestionEvenement.ModeleEvenement = Word.Application
End Sub
- Déclarons cette variable GestionEvenement AVANT la procédure
elle-même :
Dim
GestionEvenement As ClasseEvenement
Private Sub Document_New()
Set GestionEvenement = New ClasseEvenement
Set GestionEvenement.ModeleEvenement = Word.Application
End Sub
- Choisissez maintenant l'événement Close :
- Installez ce code :
Private Sub Document_Close()
Set GestionEvenement = Nothing
End Sub
Voici un petit résumé de tout ce que vous avez dans votre VBA
:
Et voilà le travail ! C'est terminé ! Pour voir
ce modèle fonctionner, il vous suffit de le fermer, puis d'aller dans
le menu Fichier/Nouveau, choisir ModeleAvecEvenement, et d'essayer simplement
de l'enregistrer (CTRL-S, ou cliquer sur la disquette), et il affichera

Preuve qu'il aura effectivement bien exécuté le
code
Private
Sub ModeleEvenement_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean,
Cancel As Boolean)
MsgBox "before save"
End Sub
Même commentaire si vous essayez d'imprimer ou de fermer.
Téléchargez
le modèle terminé ici | Je
me suis inspiré de cette page pour concevoir ce didacticiel
---