Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Déclencher un code VBA à l'ouverture de PowerPoint
Contrairement Ã
Excel ou
Word,
PowerPoint ne propose pas de
gestionnaire d'événements par défaut. Dans
Excel par exemple, l'événement
Open associé à l'objet
Workbook permet de déclencher un code à l'ouverture du classeur. C'est ainsi que, dans la
formation sur la facturation automatisée avec un formulaire Excel, nous lancions l'affichage du UserForm à l'ouverture du classeur. D'ailleurs comme le montre la capture ci-dessous, de nombreux
événements attachés à l'objet Workbook (Classeur), peuvent être gérés en
VBA Excel.
En
VBA PowerPoint, vous aurez beau chercher l'objet
Presentation pour lui associer l'
événement Open à gérer, vous ne le trouverez pas. Les
gestionnaires d'événements existent pourtant bien dans
PowerPoint avec
VBA. Mais sans doute pour des raisons de sécurité, vous devez les activer dans une
classe à instancier pour en faire un
complément VBA à lier à PowerPoint. Une fois cette
macro complémentaire ajoutée, tous les événements peuvent être interceptés. Ainsi il devient possible de déclencher un code à l'
ouverture d'une présentation ou encore au changement de diapositive pendant le
Diaporama. Ce code par exemple nous sera utile pour générer un diaporama à la volée, en fonction des photos présentes dans un dossier, dès le démarrage de la présentation. Il est donc essentiel de pouvoir générer les
événements en VBA PowerPoint.
Classe du gestionnaire d'événements
Nous devons commencer par créer une
classe pour activer le
gestionnaire d'événements. Nous allons donc utiliser un
module de classe dans une nouvelle présentation
PowerPoint.
- Démarrer PowerPoint et créer une nouvelle présentation vierge,
Comme dans toute application Office, vous pouvez basculer dans l'
éditeur de code VBA grâce au raccourci clavier
ALT + F11. Mais avant cela, nous avons besoin d'un onglet particulier, celui qui permet d'afficher le
ruban Développeur. La
formation pour débuter en VBA Excel, montre notamment comment afficher ce ruban. Si ce ruban n'est pas disponible sur votre interface :
- Cliquer avec le bouton droit de la souris n'importe où dans le ruban Accueil,
- Dans le menu contextuel, choisir Personnaliser le ruban,
- Dans la liste de droite de la boîte de dialogue qui suit, cocher la case Développeur et valider par Ok,
Si vous cliquez sur l'
onglet Développeur désormais disponible, vous affichez son ruban. Vous notez notamment la présence de contrôles de formulaire.
- Cliquer sur l'onglet Développeur en haut de la fenêtre pour afficher son ruban,
- Dans la section Code, cliquer sur le bouton Visual Basic,
Vous basculez ainsi dans l'
éditeur de code VBA PowerPoint.
- Cliquer sur le menu Insertion en haut de l'éditeur,
- Dans la liste, choisir Module de classe,
- Cliquer sur le menu Affichage en haut de la fenêtre,
- Dans la liste, choisir Fenêtre Propriétés,
Le
VBA étant un
langage orienté objets, cette fenêtre permet de régler les propriétés d'un objet actif. Pour un bouton de formulaire par exemple, il peut s'agir de son nom, de sa couleur ou encore de son texte par exemple. Au centre de l'écran, figure la page de
code, pour l'instant vide, du
module de classe.
- Saisir gestionEv pour la propriété Name dans la fenêtre Propriétés,
Pour être exploitée avec ses propriétés et méthodes, une classe doit être
instanciée par son nom. Un nom explicite est donc forcément judicieux.
Instancier une classe consiste à déclarer un
objet qui
hérite de cette
classe, soit de ses propriétés et méthodes qu'il peut alors gérer.
- Cliquer dans la feuille de code vierge au centre de l'écran,
- Ajouter la ligne de code suivante :
Public WithEvents app As Application
Nous déclarons explicitement un
objet pour activer et gérer les
événements en
VBA PowerPoint. Cet
objet est désormais reconnu comme un
objet de l'application et des
événements lui sont associés.
- En haut de la feuille de code, dérouler la liste de gauche,
- Choisir l'objet app, présent grâce à notre déclaration publique,
- Dérouler ensuite la liste de droite et choisir l'événement PresentationOpen,
Vous créez ainsi la procédure événementielle :
Private Sub app_PresentationOpen(ByVal Pres As Presentation)
End Sub
C'est elle, une fois le gestionnaire activé, qui permettra de déclencher un
code VBA à l'ouverture d'une présentation
PowerPoint. En déroulant la liste de droite, vous avez constaté qu'il est possible d'intercepter un très grand nombre d'
événements, en
VBA PowerPoint.
Pour l'instant, nous avons simplement besoin de vérifier que nous sommes en mesure de déclencher un
code VBA, Ã l'ouverture d'une
présentation PowerPoint. Nous allons donc réaliser un petit test sous forme de message qui apparaît à l'écran.
- Entre les bornes de la procédure événementielle, ajouter la ligne de code suivante :
MsgBox 'L'événement est bien intercepté et géré à l'ouverture'
Le
MsgBox est une
fonction VBA que nous avons déjà largement exploitée en
Visual Basic pour Excel. Elle permet d'afficher un message à l'écran, dans une boîte de dialogue. Ce message est le texte passé en argument, saisi entre guillemets.
Instancier la classe - Initialiser les événements
Nous devons maintenant initialiser ce
gestionnaire d'événements en
instanciant cette
classe.
- Cliquer sur le menu Insertion en haut de l'éditeur de code,
- Dans la liste, choisir Module,
- Dans la fenêtre Propriétés, le renommer Initialisation,
Un
module permet d'écrire des procédures de code, directement liées à la
présentation PowerPoint.
- Dans sa feuille de code, au centre de l'écran, saisir la déclaration suivante :
Dim even As New gestionEv
Le mot clé
Dim permet de déclarer une variable ou un objet. C'est d'ailleurs ce qu'enseigne la
formation VBA Excel sur les variables et leur dimensionnement. Ici, nous déclarons un
objet que nous nommons
even. Nous le déclarons comme un
objet héritant de la classe que nous venons de créer (
As New gestionEv). Il peut donc désormais piloter les propriétés et méthodes de cette
classe. Dans notre cas, c'est lui qui va gérer les
événements que nous devons initialiser. Il ne reste plus qu'à activer le
gestionnaire d'événements à l'ouverture.
- A la suite du module, ajouter la procédure suivante :
Sub Auto_Open()
Set even.app = Application
End Sub
A l'ouverture donc, nous réalisons le lien entre l'application et le
gestionnaire d'événements que nous avons créé. Le code est déjà terminé.
Macro complémentaire et gestionnaire d'événements.
Pour que les événements puissent être interceptés, cette
classe doit désormais être exploitée à chaque utilisation de
PowerPoint. Et pour qu'elle s'active à chaque démarrage de
PowerPoint, il suffit d'en faire un
complément (
ppam) à lier à l'application.
- Revenir sur la présentation PowerPoint par Alt + F11 par exemple,
- Cliquer sur l'onglet Fichier en haut à gauche de la fenêtre,
- Dans la liste, choisir Enregistrer sous puis cliquer sur Parcourir,
- Dans la zone Type de la boîte de dialogue, choisir Complément PowerPoint(*.ppam), comme l'illustre la capture ci-dessus,
- Lui attribuer un nom, par exemple : gestionEve.ppam et cliquer sur Enregistrer,
Vous avez noté que
PowerPoint a redirigé l'enregistrement dans un dossier spécial, celui des
macros complémentaires des logiciels Office. Vous trouverez ainsi au même emplacement les
compléments que vous créerez avec
Excel. C'est d'ailleurs ce que nous avions vu lors de la
formation sur la création de fonctions en VBA Excel. Grâce au
complément, ces fonctions de feuille de calcul, créées en
VBA, devenaient disponibles pour n'importe quel classeur ouvert dans Excel. Nous devons maintenant lier ce complément et l'application
PowerPoint.
- Dans la section Compléments du ruban Développeur, cliquer sur le bouton Compléments PowerPoint,
- Dans la boîte de dialogue, cliquer sur le bouton Ajouter un nouveau,
- Puis, double cliquer sur la macro complémentaire gestionEve.ppam et valider en fermant,
Désormais à chaque ouverture de
PowerPoint, le complément qui lui est lié, s'active. Donc du
code VBA s'exécutera systématiquement. Nous devons donc modifier les règles de sécurité par défaut de l'application. Les
macros peuvent être potentiellement dangereuses si elles sont développées par des personnes malveillantes.
- Dans la section Code du ruban Développeur, cliquer sur le bouton Sécurité des macros,
- Cocher la case Activer les macros, comme l'illustre la capture ci-dessus, puis valider,
Avec ce réglage, le
complément pourra se déclencher en même temps que
PowerPoint s'ouvre, sans restriction. Mais désormais faites très attention de ne pas exécuter des
applications PowerPoint développées par des tiers. Pensez au moins à les analyser à l'antivirus en amont. Le
VBA est un
langage de programmation. Plus aucun verrou ne le bloque, donc toutes les possibilités sont ouvertes, y compris les plus désastreuses.
- Ouvrir n'importe quelle présentation PowerPoint pour tester le complément,
Comme vous le constatez, en même temps que la présentation s'ouvre, le message que nous avons codé avec la
fonction VBA MsgBox, s'affiche à l'écran. Cela signifie que nous sommes parvenus à intercepter l'
événement généré à l'ouverture d'une présentation. Et donc nous avons déclenché un code en conséquence.
Si vous souhaitez intercepter d'autres
événements comme ceux qui se produisent par exemple à l'exécution du diaporama ou au changement de diapositive, c'est très simple. Il suffit de modifier la classe avec de nouvelles procédures événementielles. Si dans la liste de droite de l'éditeur de code, vous choisissez l'événement
SlideShowBegin de l'objet
app, vous créez la procédure qui déclenchera un code au démarrage du diaporama.
Bien sûr à ce stade, le code que nous avons produit à titre de test est non seulement inutile mais aussi parasite. Il se déclenchera à chaque ouverture de
PowerPoint. Dans une prochaine formation, l'objectif sera pour nous, de déclencher un code sur reconnaissance du nom de la présentation. L'objet
ActivePresentation associé à sa propriété
Name nous permettra de réaliser ce test. Alors nous pourrons exécuter un code dédié en lançant sa procédure grâce à l'objet
Application et sa méthode
Run.
En attendant vous pouvez désactiver le
complément. Pour ce faire, vous cliquez sur le bouton
Compléments PowerPoint du
ruban Développeur et vous décochez la case de la
macro complémentaire.