POWERPOINT : Gérer les événements

Thierry GASPERMENT

Apprenez à gérer les événements dans PowerPoint en VBA.

Commentez cet article : Commentez

- Titre : POWERPOINT : Gérer les événements

- Auteur : Thierry GASPERMENT

- Parution : 20 novembre 2008

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2008 Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.

Sommaire

- I. Introduction

- II. Sécurité des macros

- III. De quels événements je dispose?

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

- V. Initialiser le gestionnaire d'événements

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

- VII. Tester le gestionnaire d'événements

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

- IX. Téléchargement

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

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

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

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

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

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

'---------------------------------------------------------------------------
' 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

' 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

' 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

Télécharger l'exemple(PowerPoint 2003)

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