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

  1. Lancez Word
  2. Enregistrez directement le document blanc sous le nom de MODELE : ModeleAvecEvenement.dot
  3. Allez dans l'environnement VBA (Alt-F11)
  4. Créez un nouveau Module de classe (Bouton droit de la souris)
  5. Nommez-le ClasseEvenement (Menu Affichage/Fenêtre propriétés)
  6. Dans son code, copiez-y ceci :
    Public WithEvents ModeleEvenement As Word.Application
  7. Dans la liste déroulante du haut, choisissez "ModeleEvenement"
  8. 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
  9. Choisissez ensuite DocumentBeforePrint, et DocumentBeforeClose. Ca crée les événements correspondants :
  10. 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 :
  11. Enregistrez votre modèle par sécurité.
  12. Cliquez deux fois sur "ThisDocument" pour faire apparaître le module correspondant à côté. Choisissez "Document" dans la liste déroulante
  13. 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).
  14. Appelez-y la procédure CreationEvenement
    Private Sub Document_New()
       Set GestionEvenement = New ClasseEvenement
       Set GestionEvenement.ModeleEvenement = Word.Application
    End Sub
  15. 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
  16. Choisissez maintenant l'événement Close :
  17. 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

---