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 :
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
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 :
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 :
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.
'---------------------------------------------------------------------------
' 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 :
' 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) :
' 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 |