Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Diaporama au contenu dynamique généré automatiquement
L'objectif de cette formation est de réussir à concevoir un
diaporama autonome avec du
code Visual Baisic pour
PowerPoint . Deux défis sont à relever. Tout d'abord, le
code doit se déclencher automatiquement à l'ouverture de la présentation. Ensuite, le
diaporama doit générer
automatiquement et
dynamiquement son contenu, en fonction des photos présentes dans un dossier. Si des photos sont ajoutées, elles doivent être intégrées dans le
diaporama , qui évolue donc dynamiquement. Pour que ce
code puisse se déclencher à l'ouverture, nous avons besoin de personnaliser le
gestionnaire d'événements de
PowerPoint . Nous l'avions activé dans la formation précédente, sous forme de
complément , afin d'intercepter les
événements générés par une présentation, comme son ouverture.
Déclencher un code sur Ouverture de présentation
Pour que le
gestionnaire d'événements puisse se déclencher à l'ouverture spécifiquement pour cette
présentation , nous devons adapter son code. Et donc, nous devons commencer par créer une nouvelle présentation avec un nom spécifique, qui sera reconnu par le
gestionnaire d'événements , dans le
code .
Démarrer PowerPoint et créer une nouvelle présentation vierge ,
Si des zones de texte figurent sur la diapositive, les supprimer,
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur de code VBA ,
Cliquer sur le menu Insertion et choisir Module dans la liste,
Un nouveau module nommé
Module1 apparaît dans l'arborescence de l'explorateur de projet, sur la gauche de l'écran. Un
module permet d'accueillir les
procédures de code Visual Basic . Nous devons commencer par lui attribuer un nom précis à l'aide de la
fenêtre Propriétés .
Cliquer sur le menu Affichage et choisir Fenêtre Propriétés dans la liste,
La
fenêtre Propriétés apparaît conventionnellement en bas à gauche de l'écran, sous l'explorateur de projet. Elle permet de modifier les attributs d'un objet de programmation sélectionné, le
module ici en l'occurrence.
Dans la fenêtre, modifier la propriété (Name) en Diaporama ,
Dans sa feuille de code au centre de l'écran, créer la procédure generer(), comme suit :
Sub generer()
MsgBox "Vérification"
End Sub
La fonction
MsgBox que nous avons déjà présentée en
VBA Excel , permet d'afficher un message à l'écran, celui saisi entre guillemets. Nous allons l'utiliser comme test temporairement afin de vérifier que le
gestionnaire d'événements du
complément , permet bien d'intercepter l'ouverture de cette présentation spécifiquement.
Réaliser le raccourci ALT + F11 pour basculer cette fois sur la présentation PowerPoint ,
Cliquer sur l'onglet Fichier puis Enregistrer sous et enfin Parcourir ,
Dans la boîte de dialogue, définir un emplacement de sauvegarde,
Dans la zone Type , choisir l'extension pptm pour la gestion du code VBA ,
Nommer le fichier : diaporama-dynamique par exemple et enregistrer,
Une présentation
PowerPoint par défaut (*.pptx) ne permet pas de gérer les
macros VBA , pour des raisons de sécurité. C'est pourquoi nous devons le préciser à l'enregistrement pour que le
code ne soit pas neutralisé.
Nous devons maintenant récupérer les sources nécessaires à la construction de ce
diaporama dynamique . Il s'agit des photos bien sûr mais aussi du
complément dont le
code doit être adapté.
Il s'agit du
code qui active le
gestionnaire d'événements de
PowerPoint , par instanciation d'une classe. Ce
code devra ensuite être lié à l'application en tant que
complément VBA . Nous l'avons développé dans la
formation VBA Powerpoint pour déclencher un événement à l'ouverture .
Basculer dans l'éditeur de code (ALT + F11 ),
Dans l'explorateur de projet , déployer le dossier Modules de classe ,
Double cliquer sur le module gestionEv pour afficher son code dans l'éditeur,
En haut de la feuille de code, dans la liste de gauche, choisir l'objet app ,
Dans la liste de droite, choisir l'événement PresentationOpen ,
Entre les bornes de la procédure app_PresentationOpen générée, saisir le code suivant :
If (ActivePresentation.Name = "diaporama-dynamique.pptm") Then
Application.Run "diaporama-dynamique.pptm!Diaporama.generer"
End If
L'
instruction If permet de poser un critère afin de ne pas déclencher les
événements pour chaque présentation de
PowerPoint . La formation
VBA Excel pour gérer les conditions , présente cette instruction précieuse. Ici nous l'utilisons pour vérifier que la présentation ouverte, porte bien le nom :
diaporama-dynamique.pptm . C'est l'objet
ActivePresentation associé à sa propriété
Name qui permet de valider cette correspondance. Si l'égalité est vérifiée, alors nous lançons le code de la procédure
generer , que nous sommes en train de coder dans la présentation
diaporama-dynamique.pptm . C'est l'objet
Application associé à sa
méthode Run qui permet d'exécuter le code d'un
module externe , en passant son nom en paramètre, préfixé du nom de la présentation et de celui du module dans lequel il est écrit. Comme ce code est écrit dans la procédure événementielle
app_PresentationOpen , il est susceptible de s'exécuter à l'ouverture de la présentation donc.
Basculer sur la présentation PowerPoint (ALT + F11 ),
Cliquer sur l'onglet Fichier puis sur Enregistrer sous et Parcourir ,
Dans la zone Type de la boîte de dialogue, choisir Complément PowerPoint(*.ppam) ,
Puis, cliquer sur Enregistrer et fermer le complément (CTRL + W ),
Revenir sur la présentation diaporama-dynamique.pptm ,
Nous devons lier le
complément que nous venons de créer Ã
PowerPoint . Pour ce faire, il est plus simple d'utiliser le
ruban Développeur . S'il n'est pas présent dans vos onglets, la
formation pour débuter en VBA Excel explique comment l'afficher.
Dans le ruban Développeur , cliquer sur le bouton Compléments PowerPoint ,
Dans la boîte de dialogue qui suit, cliquer sur le bouton Ajouter un nouveau ,
Sélectionner le complément gestionEv.ppam et valider par Ok pour l'ajouter,
Le
complément dont le but est d'activer le
gestionnaire d'événements VBA , spécifiquement pour notre présentation, est désormais lié à l'application
PowerPoint . Nous allons vérifier que tout fonctionne correctement.
Fermer la présentation diaporama-dynamique.pptm par CTRL + W par exemple,
Puis la rouvrir en passant par l'onglet Fichier puis Ouvrir ou Récent ,
Le MsgBox s'affiche avec le message de vérification que nous avons codé dans la
procédure generer() , elle même lancée par le
complément du
gestionnaire d'événements . En revanche, si vous ouvrez une autre présentation, qui ne porte pas le même nom, le gestionnaire d'événements reste muet. Tout fonctionne donc parfaitement à ce stade.
Déclarer les variables du diaporama
Pour piloter ce
diaporama par le
code VBA , nous avons besoin de
variables pour gérer la diapositive, les images ou encore les fichiers. Ces variables se déclarent conventionnellement en en-tête de
code , pour plus de clarté. La
formation VBA Excel sur les variables apprend à déclarer et bien typer ces dernières.
Supprimer la ligne de code de la fonction MsgBox de la procédure generer() ,
Saisir les lignes de déclarations de variables suivantes:
Dim Fichier As String, Dossier As String
Dim Pres As Presentation, Diapositive As Slide
Dim Img As Shape, zone_titre As Shape, effet As Effect
Dim Largeur As Double, Hauteur As Double
Dim nom_zone As String, nom_image As String
Nous avons besoin des
variables (Fichier et Dossier) pour parcourir les photos présentes dans le sous dossier sources. Nous déclarons deux
variables objets (Presentation et Diapositive) pour piloter le
diaporama . Les
variables Img et zone_titre, déclarées comme des formes (
Shape ), permettront de piloter les photos insérées, et leur titre écrit dans une zone de texte. La
variable objet effet permettra de définir et paramétrer les
effets d'animation à appliquer sur chacune de ces formes. Les
variables Largeur et Hauteur seront initialisées sur les dimensions de la
diapositive , afin de faciliter le positionnement des formes sur cette dernière. Enfin les
variables nom_zone et nom_image permettront d'attribuer des noms explicites aux formes, comme si nous les renommions par le
volet Sélection , que nous avons présenté dans la
formation PowerPoint sur les outils de dessin .
Poursuivons avec le
code de la procédure. Nous allons commencer par
initialiser toutes les
variables que nous pouvons régler. Nous devons affecter les variables
Largeur et
Hauteur , respectivement sur la largeur et la hauteur de la
diapositive , dans la présentation
PowerPoint .
A la suite des déclarations, saisir les deux lignes de code suivantes :
Hauteur = ActivePresentation.PageSetup.SlideHeight
Largeur = ActivePresentation.PageSetup.SlideWidth
ActivePresentation est donc l'
objet PowerPoint qui désigne la présentation en cours.
PageSetup est une propriété qui renvoie une bibliothèque de valeurs sur les réglages de mise en page de la diapositive. Ainsi, les propriétés dérivées
SlideHeight et
SlideWidth permettent d'atteindre et de renvoyer respectivement, la hauteur et la largeur de cette dernière.
Il est important de contrôler régulièrement le code en cours de conception afin de s'assurer qu'il ne contient pas d'erreur. Sinon, plus on avance, plus elles deviennent compliquées à corriger dans le flot d'informations. Pour ce faire, vous pouvez utiliser le menu
Débogage de l'éditeur de code ou encore placer temporairement une fonction MsgBox, pour contrôler les valeurs initialisées.
Ajouter la ligne de code suivante à la suite :
Set Diapositive = ActivePresentation.Slides(1)
La propriété
Slides de l'objet
ActivePresentation renvoie l'objet diapositive, selon l'index passé en paramètre, soit sa position dans la présentation. Comme nous n'avons qu'une seule diapositive, il s'agit forcément de la numéro 1. Nous aurions pu continuer d'utiliser l'expression
ActivePresentation.Slides(1) pour la désigner. Mais ainsi reconnue sous le nom
Diapositive , les expressions dérivées que nous construirons seront plus courtes et donc plus claires. Comme cette expression renvoie un objet diapositive, dans la déclaration de variable nous avions judicieusement déclaré
Diapositive comme un
objet Slide . Sinon une erreur aurait été générée.
Nous allons maintenant initialiser les variables qui doivent permettre de parcourir les photos dans le dossier. Pour cela, nous allons faire pointer la variable
Dossier dans le sous dossier
sources du
répertoire de l'application .
A la suite du code, ajouter les deux affectations suivantes :
Dossier = ActivePresentation.Path & "\sources\"
Fichier = Dir(Dossier & "\*.jpg*")
La propriété
Path de l'objet
ActivePresentation retourne le chemin du dossier de l'application. Concaténé (
& ) au sous dossier
\sources\ , nous obtenons le chemin complet du dossier dans lequel sont stockées les photos. La fonction
Dir avec en paramètre le chemin du répertoire concaténé au filtre, permet de stocker le premier fichier du dossier, dans la
variable Fichier . Nous utilisons le filtre
*.jpg car il s'agit de l'extension de toutes les photos. A l'avenir, nous pourrons ajouter des fichiers d'une autre nature dans ce dossier, sans que cela nuise à la récupération des photos.
Pour avoir plus de renseignements sur une
fonction VBA , un
objet , une
méthode ou une
propriété , sélectionnez cette dernière et enfoncez la touche
F1 du clavier. Vous êtes ainsi redirigé sur l'aide en ligne pour l'élément sélectionné.
Maintenant, nous allons appliquer un petit réglage de mise en page avec un
thème pour la présentation. Habituellement, nous appliquons ces
thèmes par le biais du
ruban Création . D'ailleurs la
formation PowerPoint sur la lecture en boucle d'un diaporama , nous avait appris à changer de
thème d'une diapositive à une autre. Ici, nous appliquons ce thème par le code. Il faut faire référence à un fichier de thème ou de modèle de présentation, enregistré sur le disque, dans les répertoires d'installation des logiciels Office.
A la suite du code, ajouter la ligne suivante, en l'adaptant à votre arborescence :
Diapositive.ApplyTheme("C:\ Program Files (x86)\ Microsoft Office\ Document Themes 12\ Technic.thmx")
La méthode
ApplyTheme de l'objet Diapositive déclaré et initialisé comme la première diapositive de la présentation, permet d'appliquer un
thème , en faisant référence à un fichier de thème, enregistré sur le disque. C'est d'ailleurs ce qu'enseigne l'aide en ligne si vous enfoncez la touche
F1 après avoir sélectionné la méthode
ApplyTheme dans le code. Ici nous appliquons donc le thème
Technic .
Nous allons vérifier que cette méthode applique bien le thème.
Enfoncer la touche F5 du clavier pour exécuter le code,
Basculer sur la présentation (ALT + F11 ),
Vous remarquez que la diapositive est parée d'un arrière-plan sombre, correspondant au thème Technic. De même, des préférences globales de mise en forme lui sont appliquées. Nous le constaterons, lorsque nous ajouterons des zones de texte. Elles récupèreront les attributs de police définis par le thème.
Chaque exécution du code va récupérer des photos pour les insérer sur la diapositive en leur appliquant des effets d'animation avec minutage. Pour ne pas cumuler ces éléments, le code doit, avant d'insérer ces images, s'assurer que la diapositive est purgée. A l'aide d'une
boucle For , nous allons passer en revue, toutes les formes présentes sur la diapositive, pour les supprimer. Ces instructions itératives sont enseignées dans la
formation VBA Excel sur les boucles For pour automatiser la mise en forme de tableaux .
A la suite de la procédure, ajouter les trois lignes suivantes :
For i = Diapositive.Shapes.Count To 1 Step -1
Diapositive.Shapes(i).Delete
Next i
La propriété
Count de la propriété dérivée
Shapes de l'objet
Diapositive , renvoie le nombre de formes recensées sur la diapositive en cours. Nous initialisons donc une
boucle qui part de cette dernière forme, pour remonter jusqu'à la première, en décrémentant de 1 (
Step -1 ). Ainsi, à chaque itération, soit chaque passage dans la boucle, nous supprimons la forme repérée par son numéro d'index, grâce à la méthode Delete (Diapositive.Shapes(i).Delete). Si aucune forme n'est présente, la
boucle n'est pas déclenchée puisque la propriété
Count renvoie 0.
Parcourir les fichiers d'un dossier en VBA
Il est temps de parcourir le contenu du sous dossier
sources afin de récupérer les photos qu'il contient, pour les insérer sur la diapositive. C'est une fois de plus une
boucle , qui va permettre ce traitement itératif, mais une boucle
Do While cette fois. En effet, avec une boucle For, nous connaissons les points de départ et d'arrivée. L'intérêt d'une boucle
Do While (Faire tant que), est qu'elle continue son traitement, tant que le critère qui lui est passé, est vérifié. En effet, on ne connaît pas le nombre de photos dans le dossier, c'est tout l'intérêt de ce
diaporama dynamique . Donc elle doit le parcourir et récupérer les images, tant qu'il y en a.
A la suite du code, ajouter la boucle Do While pour parcourir les fichiers du dossier :
Do While Len(Fichier) > 0
MsgBox Fichier
Fichier = Dir
Loop
Nous déclenchons la
boucle avec comme paramètre d'itération :
Len(Fichier) > 0 . La fonction
Len permet de retourner le nombre de caractères de la variable texte (
String ) passée en paramètre. Si ce nombre n'est pas supérieur à 0, cela signifie que plus aucun fichier ne correspond au filtre et donc, l'exécution de la boucle se termine. Dans le cas contraire, un traitement est réalisé entre ses bornes. Nous nous contentons pour l'instant de réaliser un test :
MsgBox Fichier , pour afficher les noms des photos et contrôler le bon fonctionnement du programme. La ligne
Fichier = Dir est essentielle. Elle permet de placer le pointeur sur le fichier suivant dans le dossier, avant de boucler. Sinon, la variable reste toujours calée sur le même nom de fichier, le critère reste toujours vrai et la boucle est infinie. Une instruction
Do While se boucle par le mot clé
Loop .
Enfoncer la touche F5 du clavier pour tester le code,
Un
MsgBox apparaît autant de fois qu'il y a de photos correspondant au critère de la
boucle , pour afficher le nom du fichier. Le code fonctionne donc parfaitement et récupère bien les éléments du dossier qu'il parcourt.
Insérer des images et des formes en VBA
Maintenant que nous sommes capables de récupérer les noms des images contenues dans le dossier, il s'agit de les insérer sur la diapositive. En même temps, nous devons créer une zone de titre qui affichera le nom du fichier, pour commenter l'image. Puis nous dimensionnerons et positionnerons ces formes par le
VBA . Nous devons utiliser les deux noms d'objets que nous avons prévus à cet effet,
Img et
zone_titre .
Supprimer la ligne de la fonction MsgBox dans la boucle,
Ajouter les deux lignes de code suivantes, Ã la place :
Set Img = Diapositive.Shapes.AddPicture(Dossier & "\" & Fichier, False, True, 0, 0)
Set zone_titre = Diapositive.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 200, 50)
Le mot clé
Set est nécessairement utilisé pour affecter un objet. L'objet
Img et l'objet
zone_titre sont affectés respectivement à l'image insérée et à la zone de texte créée. La méthode
AddPicture de la propriété
Shapes de l'objet
Diapositive permet d'insérer l'image désignée en argument (Dossier & "\" & Fichier), selon certains paramètres. Le paramètre suivant (
False ) indique que l'image est insérée indépendamment du fichier source, non liée. Puis vient la valeur
True pour indiquer que l'image doit être sauvegardée avec la présentation. Les deux derniers paramètres permettent d'indiquer l'emplacement de l'image insérée
Left et
Top . Comme nous définissons ces positions de référence à 0, le coin supérieur gauche de la photo est calé sur le coin supérieur gauche de la diapositive, à l'insertion. Nous pourrions aussi définir la largeur et la hauteur de l'image à l'insertion. Mais comme ces paramètres sont facultatifs, nous ne les indiquons pas et l'image est insérée avec ses dimensions d'origine. La touche
F1 sur la méthode sélectionnée, conduit sur l'aide en ligne qui explique comment remplir ses arguments.
La méthode
AddTextbox de la propriété
Shapes de l'objet
Diapositive permet de créer une zone de texte vide (Par défaut), sur la diapositive. Le premier paramètre permet de définir l'orientation du texte, à l'horizontal ici. Les deux paramètres suivants (0,0) indiquant comme précédemment la position de la forme à sa création (
Left et
Top ). Là aussi nous les calons sur le bord supérieur gauche de la diapositive. Les deux derniers paramètres (200,50) permettent de définir respectivement la largeur et la hauteur de la forme à la création (
Width et
Height ). Ces arguments ne sont pas facultatifs, donc nous entrons des valeurs arbitraires que nous changerons par la suite.
Enfoncer la touche F5 du clavier pour exécuter le code ,
Puis, basculer sur la diapositive de la présentation (ALT + F11 ),
Des images empilées sont présentes sur la diapositive. Il s'agit de toutes les photos du sous dossier, que la boucle a récupérées une à une, grâce à la méthode
AddPicture . A chaque passage dans la
boucle , la méthode
AddTextBox est aussi censée avoir créé une zone de texte. Donc nous devons avoir autant de zones de texte qu'il y a de photos. Elles ne sont pas visibles car pour l'instant elles sont vides. Mais si vous réalisez le raccourci
CTRL + A pour tout sélectionner, vous noterez les poignées d'angles de la première zone de texte, en haut à gauche de la diapositive.
Le
volet Sélection est un outil précieux pour manipuler tous les objets présents sur la diapositive, comme nous l'avait appris la
formation Powerpoint sur la création de documents promotionnels .
Dans le ruban Accueil , cliquer sur le bouton Sélectionner , tout à fait à droite,
Dans la liste, choisir Volet Sélection ,
Le
Volet Sélection , proche de la palette des calques de Photoshop, s'affiche sur la droite de l'espace de travail, comme l'illustre la capture ci-dessus. Il liste tous les éléments de la diapositive et à ce titre, vous notez bien laprésence des images avec autant de zones de texte. Nous allons renommer ces éléments grâce à la propriété
Name des objets de type
Shape , en
VBA PowerPoint .
Revenir dans l'éditeur de code (ALT + F11 ),
Dans la boucle , à la suite du code précédent, ajouter les instructions suivantes :
nom_image = Replace(Fichier, ".jpg","")
Img.Name = nom_image
zone_titre.Name = "Titre-" & nom_image
Nous renommons tous ces objets en fonction des noms attribués aux photos dans l'explorateur Windows. La
variable Fichier a stocké le nom complet de ce fichier. Donc nous utilisons la
fonction Replace de
VBA qui permet de remplacer une occurrence par une autre, dans une chaîne de caractères. Ici nous remplaçons l'occurrence
.jpg par une chaîne vide. En d'autres termes, nous la supprimons et stockons le résultat final dans la variable nom_image :
nom_image = Replace(Fichier, ".jpg", "") . Nous affectons ce résultat à la propriété
Name de l'objet
Img . Ainsi l'image sur la diapositive possède le même nom que la photo dans l'explorateur, sans l'extension. Nous concaténons ce résultat au texte statique
Titre- pour l'affecter à la zone de texte, là encore par sa propriété
Name :
zone_titre.Name = "Titre-" & nom_image . Chaque zone de texte est ainsi dotée d'un nom proche de la photo qu'elle accompagne. Nous allons de nouveau exécuter le code pour vérifier le résultat. Il n'est pas nécessaire préalablement de supprimer les éléments de la diapositive. L'instruction
Diapositive.Shapes(i).Delete dans la boucle
For saisie en Amont, se charge de faire le ménage. En son absence en revanche, nous cumulerions les doublons de photos et de zones de texte.
Enfoncer la touche F5 du clavier pour exécuter le programme,
Basculer sur la présentation (ALT + F11 ),
Toutes les images et zones de textes sont bien insérées et créées, puis renommées à la volée cette fois-ci. C'est ce qu'illustre le
volet Sélection de la capture ci-dessus.
Réaliser le raccourci ALT + F11 pour revenir dans l'éditeur de code,
Maintenant que les objets sont correctement nommés, nous souhaitons les dimensionner et les positionner sur la diapositive, par rapport aux dimensions de cette dernière. Nous avons déjà stocké ces dimensions dans les variables, Hauteur et Largeur, en début de code. Nous souhaitons que la largeur de chaque photo occupe 70% de la largeur de la diapositive. De même, nous souhaitons qu'elle soit centrée sur la largeur de la diapositive et alignée vers le bas, pour laisser de la place au titre.
Dans la boucle , à la suite du code précédent, ajouter les instructions suivantes :
Img.Height = Hauteur * 0.7
Img.Top = (Hauteur - Img.Height * 1.1)
Img.Left = (Largeur - Img.Width) / 2
La propriété
Height de l'
objet Img de type
Shape permet d'affecter la hauteur de l'image désignée par cet objet. Nous lui affectons une hauteur égale à 70% de la hauteur de la diapositive
(= Hauteur * 0.7 ). La largeur sera redimensionnée automatiquement afin de conserver les proportions, si bien qu'il n'est pas nécessaire de la définir. La propriété
Top de l'
objet Img renvoie son emplacement par rapport au bord supérieur de la diapositive.
Hauteur - Img.Height : permet de tenir compte de la hauteur de l'image, redimensionnée juste avant, afin de caler son bord inférieur sur le bord inférieur de la diapositive. Avec le
facteur 1,1 nous décalons légèrement la photo vers le haut pour laisser respirer la présentation. Enfin, la propriété
Left de l'
objet Img permet de définir l'emplacement de l'image par rapport au bord gauche de la diapositive. En tenant compte de la moitié de la largeur de la diapositive et de la moitié de la largeur de la photo, nous centrons cette dernière horizontalement sur la présentation (
(Largeur - Img.Width) / 2 ).
Concernant la zone de texte pour le titre de chaque photo, nous souhaitons la placer sur le haut de la diapositive. Nous souhaitons en même temps grossir la taille de la police et centrer le texte dans la zone de saisie.
A la suite du code, ajouter les instructions suivantes :
zone_titre.Width = Largeur
zone_titre.Left = 0
zone_titre.TextFrame.TextRange.Text = UCase(Replace(nom_image, "-"," "))
zone_titre.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
zone_titre.TextFrame.TextRange.Font.Size = 36
zone_titre.Top = (Img.Top - zone_titre.Height) / 2
La propriété
Width de l'
objet zone_titre de type
Shape permet de définir la largeur de cet objet. Nous lui affectons la largeur de la diapositive. Ainsi lorsque nous centrerons le texte dans la zone de saisie, nous le centrerons en même temps dans la largeur de la diapositive. Avec sa propriété
Left , nous calons son bord gauche sur le bord gauche de la diapositive (
zone_titre.Left = 0 ). Pour accéder au texte d'un
objet Shape , nous devons utiliser les propriétés dérivées comme suit :
zone_titre.TextFrame.TextRange . Alors la propriété finale
Text permet de définir le contenu de la zone de saisie.
Grâce à la fonction VBA Replace, nous remplaçons tous les tirets (-) dans le nom de l'image, par un espace (
Replace(nom_image, "-", " ") ). Puis nous convertissons le résultat en majuscules grâce à la fonction
UCase , déjà abordée dans la
formation VBA Excel pour modifier la casse des textes dans les cellules . La propriété
Alignment permet de régler l'alignement du texte à l'horizontal dans sa zone de saisie (
ppAlignCenter ). Comme toujours, pour connaître les valeurs qu'il est possible d'affecter à une propriété, pensez à la touche
F1 dans l'éditeur de code, sur le terme de la propriété sélectionnée. La propriété
Font avec sa propriété
Size permet de changer la taille de la police, que nous grossissons ici (
Font.Size = 36 ). D'autres propriétés dérivées de la propriété Font permettent ainsi de régler les attributs de police, comme la couleur par exemple ou le style :
zone_titre.TextFrame.TextRange.Font.Color = RGB(255, 0, 0)
zone_titre.TextFrame.TextRange.Font.Bold = True
Enfin, grâce à sa propriété
Top , nous plaçons verticalement la zone de saisie, à la moitié de la hauteur séparant le bord supérieur de la diapositive du bord supérieur de la photo (
(Img.Top - zone_titre.Height) / 2 ).
Enfoncer la touche F5 du clavier pour exécuter le code,
Basculer sur la présentation (ALT + F11 ),
Toutes les images sont en effet correctement retaillées et positionnées si bien qu'elles se chevauchent. De même, toutes les zones de texte sont parfaitement calées au-dessus des photos, centrées sur la largeur de la diapositive.
Effets d'animations en VBA PowerPoint
Toutes les zones de texte sont parfaitement superposées, tout comme les images entre elles. Ce sont les jeux d'
animations , Ã
coder en
VBA , qui vont permettre de les faire apparaître tour à tour puis disparaître, pour laisser la place aux suivantes. La propriété
AnimationSettings d'un objet de type
Shape permet de paramétrer les effets d'animation. C'est ce qu'illustre l'exemple ci-dessous :
With Img.AnimationSettings
.EntryEffect = ppEffectFlyFromTop
.AdvanceMode = ppAdvanceOnTime
End With
Ici les propriétés dérivées de la propriété
AnimationSettings sur l'
objet Img permettent d'attribuer un
effet d'apparition depuis le haut de la diapositive, pour chaque photo, ainsi que de régler le démarrage de l'animation, après la précédente. L'inconvénient de cette propriété est qu'elle ne permet pas d'appliquer des
effets de disparition . Or chaque photo avec son titre associé, doit disparaître au bout d'un délai à définir, pour laisser apparaître les suivantes, sans chevauchement.
Pour produire de telles
animations , notamment de
disparition , il faut définir un objet de type
Effect grâce à la méthode
AddEffect selon la syntaxe suivante :
Set effet = Diapositive.TimeLine.MainSequence.AddEffect(Objet, Effet, événement)
Le premier élément à fournir à la méthode
AddEffect est le nom de l'objet à animer. Il s'agira de
Img et
zone_titre dans notre cas. Le deuxième argument est une constante correspondant à l'
effet d'animation à appliquer sur l'objet. Une fois encore, l'aide en ligne de la méthode, grâce à la touche
F1 , propose les valeurs qu'il est possible d'appliquer pour obtenir les animations souhaitées (
Tableau des effets d'animations ). Il est possible d'appliquer la valeur textuelle (première colonne) ou numérique (deuxième colonne). Le troisième argument de la méthode
AddEffect correspond à l'événement qui ordonne à l'animation de se jouer. La valeur par défaut est
msoAnimTriggerOnPageClick , soit au clic de la souris. Là aussi, il est possible d'indiquer une valeur numérique selon les informations du
tableau situé à cette adresse .
A chaque passage dans la
boucle , nous avons quatre
animations à paramétrer. Il faut une
animation de type
apparaître sur l'image ainsi qu'une
animation de type
disparaître , moyennant un
délai . C'est la même chose pour la zone de texte. Donc, plutôt que de saisir quatre fois le code, nous allons créer une
procédure pour gérer les
animations . Ce sont les paramètres que nous lui passerons qui définiront l'effet d'animation et l'objet sur lequel il sera appliqué.
Après le End Sub de la procédure generer() , créer la procédure animation() , comme suit :
Sub animation (Diapositive As Slide, forme As Shape, direction As Integer, comment As Integer, sortie As Boolean)
End Sub
Nous construisons donc une procédure pour créer et appliquer les
effets d'animation . Elle attend cinq paramètres. Selon l'instruction présentée précédemment, il est nécessaire d'indiquer la
diapositive à partir de laquelle nous appliquons ces effets. Nous lui passons donc l'objet
Diapositive . Il s'agit de connaître l'élément sur lequel l'
animation doit être appliquée. Donc nous lui passons l'
objet forme déclaré en tant que
Shape . Nous souhaitons que la photo apparaisse par le bas et le texte par le haut. Donc nous lui passons la valeur numérique correspondant à la
direction qui permettra de personnaliser l'
effet d'animation , avec la propriété adéquate. Un
effet apparaître doit se produire immédiatement, tandis qu'un
effet disparaître doit attendre que les éléments aient été affichés suffisamment longtemps. Donc nous passons l'élément
comment qui permettra de définir si l'animation doit se jouer tout de suite ou après, selon une valeur numérique (
Integer ). Enfin, il s'agit de savoir si l'animation est un effet d'entrée ou de sortie, car les réglages ne sont pas les mêmes. Donc nous passons le dernier argument
sortie en tant que
Boolean . Si la valeur est vraie, il s'agit d'un effet de sortie, sinon d'un effet d'entrée.
Entre les bornes de cette procédure, ajouter les lignes de code suivantes :
Set effet = Diapositive.TimeLine.MainSequence.AddEffect(forme, 2, , comment)
With effet
.EffectParameters.direction = direction
.Timing.Duration = 2
If (sortie = True) Then
.Timing.TriggerDelayTime = 5
.Exit = msoTrue
End If
End With
A l'élément passé en argument (
forme ), nous appliquons l'effet
msoAnimEffectFly , avec la valeur numérique, selon le tableau des
effets d'animations . Puis nous indiquons si cette animation doit se jouer avec ou après la précédente avec le paramètre
comment de la méthode
AddEffect .
Nous listons ensuite les
propriétés de l'
objet effet ainsi déclaré, afin de le paramétrer selon ces arguments. C'est l'instruction
With en
VBA qui permet de structurer le
code pour énumérer les
propriétés d'un
objet de programmation . La
formation pour débuter la programmation en VBA Excel exploite d'ailleurs amplement cette instruction. La propriété
direction de la propriété dérivée
EffectParameters de l'objet
effet , permet de définir si l'animation vient d'en haut ou dans bas, selon l'argument
direction passé en paramètre. Puis nous réglons la durée de l'animation pour la ralentir, grâce à la propriété
Duration de la propriété dérivée
Timing de l'objet
effet .
Enfin l'
instruction If qui suit, permet de paramétrer l'
animation seulement s'il s'agit d'un
effet de sortie , pour faire
disparaître l'élément. C'est pourquoi le test est posé sur la variable sortie passée en paramètre (
If (sortie = True) ). A ce moment-là , nous définissons le délai sur 5 secondes grâce à la propriété
TriggerDelayTime de la propriété dérivée
Timing de l'objet
effet . Ainsi l'élément reste en place assez longtemps avant de disparaître. Enfin et surtout, la propriété
Exit de l'objet
effet permet de définir qu'il s'agit d'une
animation pour
disparaitre . L'objet sera ainsi masqué à l'issue pour laisser place aux suivants.
Il s'agit maintenant d'appeler cette procédure quatre fois, depuis la
boucle , avec les paramètres adaptés, selon l'élément Ã
animer et l'effet désiré.
Dans la boucle de la procédure generer() , à la suite du code précédent, soit avant la ligne Fichier = Dir , ajouter les instructions suivantes :
animation Diapositive, Img, msoAnimDirectionBottom,3, False
animation Diapositive, zone_titre, msoAnimDirectionTop, 2, False
animation Diapositive, Img, msoAnimDirectionBottom, 3, True
animation Diapositive, zone_titre, msoAnimDirectionTop, 2, True
Nous appelons quatre fois la
procédure animation pour animer les deux éléments
Img et
zone_titre avec des effets d'entrée et de sortie. Les images apparaissent par le bas (
msoAnimDirectionBottom ) après la précédente (
3 ). Les zones de texte apparaissent par le haut (
msoAnimDirectionTop ) avec la précédente (
2 ), c'est-à -dire en même temps que l'image. Puis viennent les effets de sortie, paramétrés de la même façon mais avec le dernier paramètre réglé Ã
True , pour l'indiquer à la procédure, qui s'en charge en conséquence.
Enfoncer la touche F5 du clavier pour générer le code ,
Basculer sur la présentation avec ALT + F11 ,
Cliquer sur l'onglet Animations pour afficher son ruban,
Cliquer sur le bouton Volet Animations ,
Sélectionner le premier élément du volet et cliquer sur le bouton Lire à partir de ,
Tous les
effets d'animations programmés par le code VBA sont présents dans le volet, avec leur ordre d'apparition et leur minutage. Le bouton
Lire à partir de permet de réaliser un contrôle. Et vous constatez que chaque photo apparaît avec son titre avant de disparaître, après un délai de 5 secondes. Puis surviennent les autres groupes de textes et photos avec les mêmes effets, etc...
Tous ces effets sont automatisés par le code. De plus, élément très important, le contenu de ce
diaporama est
dynamique . Chaque nouvelle photo insérée dans le dossier et prise en compte et animée automatiquement.
Il ne reste plus qu'Ã lancer le
diaporama . Cette instruction doit intervenir une fois que tous les éléments ont été placés et que toutes les
animations ont été définies. Nous devons donc placer ce code dans la
procédure generer() , chronologiquement, soit après la
boucle .
Après l'instruction Loop de la fermeture de la boucle , saisir l'instruction suivante :
ActivePresentation.SlideShowSettings.Run
La méthode
Run de la propriété
SlideShowSettings de l'objet
ActivePresentation permet de lancer la lecture du
diaporama , avec tous les effets d'
animation . Pour tester le bon déroulement du programme dans sa globalité, nous allons fermer la présentation puis la rouvrir. Nous devons constater que le
gestionnaire d'événements déclenche bien l'exécution du code à l'ouverture, et donc la lecture du diaporama.
Basculer sur la diapositive (ALT + F11 ),
Fermer la présentation (CTRL + W ),
Puis la rouvrir (Fichier/Récent ),
Le
diaporama se lance effectivement à l'ouverture de la présentation. Chaque photo apparaît avec son titre, puis disparaît au bout de 5 secondes et les suivantes s'enchaînent. Vous pouvez terminer l'exécution du
diaporama en enfonçant la touche Echap du clavier.
Nous avons donc constaté que le
diaporama en plus de se construire seul, se lançait automatiquement avec l'ouverture de la présentation. Nous devons maintenant vérifier s'il est capable de
construire dynamiquement son contenu, en fonction des éléments présents dans le sous dossier
sources .
Ouvrir l'explorateur Windows (Windows + E ),
Cliquer sur le sous dossier Images du dossier Bibliothèques sur la gauche de l'explorateur,
Sélectionner et copier quelques photos (CTRL + C ),
Les coller (CTRL + V ) dans le sous dossier sources de l'application PowerPoint ,
Rouvrir la présentation PowerPoint ,
La lecture du diaporama se lance et, sans avoir fait la moindre modification, son contenu a évolué, intégrant les nouvelles photos, ajoutées à la volée, dans le sous dossier sources.