I. Introduction

Nous allons au cours de cet article apprendre à répondre aux événements de l'application PowerPoint.
Ces événements sont disponibles à partir de la version 2000.
Selon les versions, plus ou moins d'événements sont supportés.

Utilisez l'aide de PowerPoint pour plus d'informations sur les divers événements.

Cet article a été écrit avec une version 2003.

Les macros VBA ne sont pas exécutées par les visionneuses. Il faut posséder une version complète de PowerPoint.

II. Sécurité des macros

Dans la version 2003 de PowerPoint, les macros VBA sont désactivées par défaut.
Or les événements de l'application sont accessibles en VBA.
Il faut donc pouvoir exécuter des macros VBA.
Dans le menu : Outils => Macro => Sécurité....
Choisissez dans l'onglet Niveau de sécurité la valeur Niveau de sécurité moyen.
A l'exécution du diaporama, un message s'affichera pour demander ou non l'activation des macros.
Cliquez sur Activer les macros pour activer le code VBA écrit pour gérer les événements.

La gestion des événements ne fonctionnera pas pour les utilisateurs qui auront défini un niveau de sécurité élevé.

III. De quels événements je dispose?


On va le découvrir dans l'aide en ligne de l'éditeur VBA.

Pour atteindre l'éditeur VBA, tapez ALT + F11 ou dans le menu : Outils => Macro => Visual Basic Editor.

Affichez l'aide : dans le menu : ? => Aide sur Microsoft Visual Basic.

Recherchez les mots Utilisation des événements avec l'objet Application.

Cette page de l'aide résume les actions que nous allons détailler par la suite.
Cliquez sur Application en haut de la page pour atteindre l'aide de l'objet Application.

Cliquez en haut de la page d'aide sur Evénements pour avoir la liste des événements disponibles.
L'aide est précieuse pour connaître exactement les détails d'un événement.
Par exemple, l'aide de SlideShowNextSlide nous apprend que l'événement intervient avant le passage à la diapositive suivante.

IV. Créer un gestionnaire d'événements


Le gestionnaire d'événements est écrit dans un module de classe VBA.
Dans l'éditeur visual basic, créez un nouveau module de classe : Insertion => Module de classe.
Renommez ce module de classe clEvents.

Pour renommer un module, cliquez sur le module dans l'Explorateur d'objets.
Puis modifiez le nom dans la Fenêtre Propriétés.
Si une de ces fenêtres n'est pas affichée, demandez son affichage dans le menu Affichage.

Collez dans le module clEvents le code suivant :

Code du gestionnaire d'événements clEvents
Sélectionnez

Option Explicit

' Objet application qui reçoit les événements
Private WithEvents oApp As PowerPoint.Application

'---------------------------------------------------------------------------
' Initialisation de la classe
'---------------------------------------------------------------------------
Private Sub Class_Initialize()
Set oApp = New PowerPoint.Application
End Sub

'---------------------------------------------------------------------------
' Libération de la classe
'---------------------------------------------------------------------------
Private Sub Class_Terminate()
Set oApp = Nothing
End Sub


La variable oApp est l'objet qui nous permettera de capturer les événements de l'application.
On utilise les événements d'initalisation et de libération du module de classe pour instancier et libérer cet objet.

Le mot-clé WithEvents indique qu'on souhaite avoir accès aux événements de l'objet.
Il n'est utilisable que dans un module objet, d'où la nécessité de créer un module de classe.

V. Initialiser le gestionnaire d'événements


Dans le chapitre précédent on s'est mis à disposition un type d'objet clEvents.
Il faut ensuite créer un objet de ce type clEvents.

Créez un module standard : Insertion => Module.
Nommez ce module ModEvents.

Dans ce module nous allons déclarer un objet de type clEvents et créer deux fonctions :
- une fonction pour initialiser l'objet
- une fonction pour le libérer

Initialisation et libération du gestionnaire d'événements dans ModEvents
Sélectionnez

Option Explicit

' Objet pour gestion des événements
Private oEvents As ClEvents

' Active les événements
Public Sub AttachEvents()
Set oEvents = New ClEvents
End Sub

' Désactive les événements
Public Sub DetachEvents()
Set oEvents = Nothing
End Sub


Un appel à la fonction AttachEvents active le gestionnaire d'événements :
- l'objet oEvents est instancié => la procédure Class_Initialize est exécutée dans le module clEvents.
Un appel à la fonction DetachEvents le désactive.
- l'objet oEvents est libéré => la procédure Class_Class_Terminate est exécutée dans le module clEvents.


Il est nécessaire de lancer la fonction AttachEvents pour pouvoir utiliser les événements.

VI. Ajouter un événement au gestionnaire d'événements


Il faut maintenant ajouter dans le module clEvents les événements que l'on veut gérer.

Pour ajouter directement une procédure événementielle avec les paramètres corrects :

Cliquez dans la liste déroulante en haut à gauche (la liste qui contient (Général)) sur la ligne oApp.
Notez que oApp apparaît dans cette liste car la variable a été déclarée avec le mot clé WithEvents.

L'éditeur génère automatiquement une procédure événementielle :

Procédure événementielle créée automatiquement
Sélectionnez

Private Sub oApp_WindowSelectionChange(ByVal Sel As Selection)

End Sub


La première procédure créée n'est pas forcément celle que l'on veut.
Pour l'exemple, on souhaite gérer l'événement qui se décenche sur changement de diapositive.

Cliquez dans la liste déroulante en haut à droite sur la ligne SlideShowNextSlide.
L'éditeur génère automatique la procédure événementielle :

Procédure événementielle sur changement de diapositive
Sélectionnez

Private Sub oApp_SlideShowNextSlide(ByVal Wn As SlideShowWindow)

End Sub


Pour accéder à l'aide de l'événement, surlignez le nom de l'événement SlideShowNextSlide et tapez F1.
Vous trouverez dans l'aide de nombreux exemples.

Pour l'article, nous allons juste afficher un message indiquant le nom de la diapositive suivante.

Affiche le nom de la diapositive
Sélectionnez

'---------------------------------------------------------------------------
' Passage à la diapositive suivante
'---------------------------------------------------------------------------
Private Sub oApp_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
' Affiche le nom de la diapo suivante
MsgBox Wn.View.Slide.Name
End Sub


VII. Tester le gestionnaire d'événements


Pour tester le code, exécutez la procédure AttachEvents (avec F5).
Affichez ensuite le diaporama : un message apparaît entre chaque diapositive.

VIII. Exécuter automatiquement le gestionnaire d'événements


Si on ferme et réouvre le diaporama, les événements ne sont plus déclenchés.
En effet ceux-ci ne seront activés que lorsque la procédure AttachEvents sera exécutée.

Dans un complément (fichier ppa), on peut créer une procédure Auto_Open qui s'exécutera automatiquement au chargement du complément.
Pour des exemples de compléments utilisant ce principe, visitez la page cours.

Par contre dans une présentation PowerPoint aucun code VBA ne s'exécute au démarrage.

Pour activer notre gestionnaire d'événements, il faut donc ajouter sur la première diapositive une forme qui pourra être cliquée.
Sur click sur cette forme, on demandera l'exécution d'une petite procédure qui active le gestionnaire d'évenements.
Ajoutez cette procédure au module ModEvents :

Procédure qui active le gestionnaire d'évenements
Sélectionnez

' Lance les événements sur la première diapo
Public Sub RunEvents()
AttachEvents
End Sub


Ajoutez ensuite une forme à la première diapositive : par exemple un boîte contenant un texte "Cliquez ici pour lancer le diaporama".

Cliquez à droite sur la forme puis dans le menu choisissez Paramètres des actions....
Dans la fenêtre qui s'ouvre, cliquez sur Exécuter la macro puis choisissez la macro RunEvents.

Si on exécute le diaporama et que l'on clique sur la forme ajoutée à la première diapositive, le gestionnaire d'événements est bien activé.

Par contre, si l'utilisateur ne clique par sur la forme mais ailleurs sur la diapositive, on passe à la diapositive suivante sans activation des événements.
Pour éviter cela, sélectionnez la première diapositive et choisissez dans le menu : Diaporama => Transition...
Dans la section Passer à la diapositive suivante (dans la fenêtre Transition en bas), décochez la case Manuellement.
Et dans la procédure RunEvents, ajouter un passage à la diapositive suivante (le passage ne se faisant plus manuellement) :

Ajout du passage à la diapositive suivante
Sélectionnez

' Lance les événements sur la première diapo
Public Sub RunEvents()
' Active les événements
AttachEvents
' Passe à la diapositive suivante
ActivePresentation.SlideShowWindow.View.Next
End Sub


Ainsi il faut cliquer sur la forme de la première diapositive pour activer les événements et continuer le diaporama.

IX. Téléchargement

X. Annexe : liste des événements de l'objet Application

Evénément Description 2000 2002 2003 2007
AfterNewPresentation Se produit après la création d'une présentation.     X X
AfterPresentationOpen Se produit après l'ouverture d'une présentation existante.     X X
ColorSchemeChanged Se produit à la suite de la modification d'un jeu de couleurs.   X X X
NewPresentation Se produit après la création d'une présentation, lorsque celle-ci est ajoutée à la collection Presentations. X X X X
PresentationBeforeSave Cet événement se produit avant l'enregistrement d'une présentation.   X X X
PresentationClose Se produit immédiatement avant la fermeture d'une présentation, lorsque celle-ci est supprimée de la collection Presentations. X X X X
PresentationNewSlide Se produit lorsqu'une diapositive est créée dans une présentation ouverte, lorsque la diapositive est ajoutée à la collection Slides. X X X X
PresentationOpen Se produit après l'ouverture d'une présentation existante, lorsque celle-ci est ajoutée à la collection Presentations. X X X X
PresentationPrint Cet événement se produit avant l'impression d'une présentation. X X X X
PresentationSave Cet événement se produit avant l'enregistrement des présentations ouvertes. X X X X
PresentationSync Cet événement se produit lorsque la copie locale d'une présentation faisant partie de l'espace de travail d'un document est synchronisée avec la copie du serveur.     X X
SlideSelectionChanged Cet événement se produit à des moments différents selon l'affichage en vigueur.   X X X
SlideShowBegin Cet événement se produit lorsque vous démarrez un diaporama. X X X X
SlideShowEnd Se produit à la fin d'un diaporama, immédiatement après que le dernier événement SlideShowNextSlide s'est produit. X X X X
SlideShowNextBuild Cet événement se produit sur un clic de la souris ou avec une animation minutée, mais avant que l'objet animé devienne visible. X X X X
SlideShowNextClick Cet événement se produit au moment du prochain clic sur la diapositive.   X X X
SlideShowNextSlide Intervient immédiatement avant la transition vers la prochaine diapositive. X X X X
SlideShowOnNext Intervient lors de la navigation vers l'animation suivante au sein d'une diapositive.       X
SlideShowOnPrevious Intervient lors de la navigation vers l'animation précédente au sein d'une diapositive.       X
WindowActivate Cet événement se produit lorsque la fenêtre d'application, ou n'importe quelle fenêtre de document, est activée. X X X X
WindowBeforeDoubleClick Cet événement se produit lorsque vous double-cliquez sur les éléments des affichages répertoriés dans le tableau suivant. X X X X
WindowBeforeRightClick Cet événement se produit lorsque vous cliquez avec le bouton droit sur une forme, une diapositive, une page de commentaires ou un texte. X X X X
WindowDeactivate Cet événement se produit lorsque la fenêtre d'application, ou n'importe quelle fenêtre de document, est désactivée. X X X X
WindowSelectionChange Cet événement se produit lorsque la sélection de texte, de forme ou de diapositive dans la fenêtre de document active change, que ce soit par le biais de l'interface utilisateur ou du code. X X X X