Ceci est un guide complet pour automatiser PowerPoint à l'aide de macros VBA (Visual Basic pour Applications). Vous trouverez ci-dessous de nombreux exemples utiles.
PDF VBA (téléchargements gratuits)
Téléchargez notre didacticiel gratuit Microsoft PowerPoint VBA ! Ou des didacticiels VBA pour d'autres programmes Office !
Télécharger
Tutoriel PowerPoint VBA (Macros)
Enregistrer en tant que présentation prenant en charge les macros
La présentation avec le code VBA doit être « Enregistrée sous » Présentation compatible avec les macros PowerPoint (*.pptm)
Activer l'onglet « Développeur » dans le ruban
Vous devez activer l'onglet Développeur sur le ruban avant de créer le code VBA. Pour ce faire, choisissez Fichier -> Options, puis cliquez sur « Personnaliser le ruban » et cochez la case à côté de l'onglet « Développeur » dans le volet de droite.
Créer une macro PowerPoint
Voici un exemple simple de macro VBA PowerPoint :
1234567891011 | Sub SavePresentationAsPDF()Dim pptName en tant que chaîneDim PDFName en tant que chaîne' Enregistrer PowerPoint au format PDFpptName = ActivePresentation.FullName' Remplacer l'extension de fichier PowerPoint dans le nom en PDFPDFName = Gauche(pptName, InStr(pptName, ".")) & "pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2Fin du sous-marin |
Il enregistre la présentation active au format PDF. Chaque ligne de code effectue les opérations suivantes :
- Crée des variables pour le nom PowerPoint et le nom PDF
- Attribue le nom de la présentation active à la variable pptName
- Crée le nom complet du PDF
- Enregistre la présentation au format PDF
Application PowerPoint
Lorsque le code VBA s'exécute dans une présentation PowerPoint, l'application PowerPoint est l'application par défaut et elle peut être manipulée sans référence explicite. Créer une nouvelle présentation
Pour créer une présentation, utilisez la méthode Add de l'application PowerPoint.
123 | Application.Présentations.Ajouter' ou sans référence explicitePrésentations.Ajouter |
Ouvrir une nouvelle présentation
Pour ouvrir une nouvelle présentation vierge, utilisez la méthode Add de la collection Application.Presentations
1 | Présentations.Ajouter |
Ouvrir une présentation existante
Pour ouvrir une présentation que vous avez déjà créée, utilisez la méthode Open de la collection Application.Presentations
1 | Présentations.Ouvrir ("Ma Présentation.pptx") |
Le code ci-dessus suppose que la présentation se trouve dans le même répertoire que la présentation PowerPoint contenant le code.
Ouvrir et affecter à une variable
Vous devez affecter la présentation que vous ouvrez à une variable afin de pouvoir la manipuler selon vos besoins.
12 | Dim ppt comme présentationDéfinir ppt = Presentations.Open("Ma présentation.pptx") |
Reportez-vous à la présentation active
Utilisez la référence ActivePrentation pour manipuler la présentation active dans l'interface graphique lorsque le code VBA est exécuté.
12 | ' Imprimer le nom de la présentation active dans la fenêtre immédiateDebug.Print ActivePresentation.Name |
Enregistrer la présentation actuelle
La déclaration ci-dessous enregistrera la présentation active si elle a été enregistrée auparavant. S'il n'a pas été enregistré, la boîte de dialogue « Enregistrer sous » vous sera demandée.
1 | ActivePresentation.Save |
Fermer la présentation actuelle
L'instruction ci-dessous fermera la présentation active même si elle n'a pas été enregistrée après la dernière modification.
1 | ActivePrésentation.Fermer |
Références utiles
Attribuer une présentation existante (par nom) à une variable
12 | Dim myPresentationByName en tant que présentationDéfinissez myPresentationByName = Application.Presentations ("Ma présentation") |
Affecter la diapositive active à la variable
12 | Courant faibleSlide As SlideDéfinir currentSlide = Application.ActiveWindow.View.Slide |
Attribuer une diapositive par index à une variable
12 | Dim mySlide As SlideDéfinir mySlide = ActivePresentation.Slides(11) |
Compter le nombre de diapositives
12 | Dim slideCount As LongslideCount = ActivePresentation.Slides.Count |
Obtenir le numéro d'index de la diapositive de la diapositive actuelle
12 | Dim currentSlideIndex As SlidecurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndex |
Ajouter une diapositive vierge à la fin du diaporama
1234567 | Dim slideCount As LongDim newSlide as SlideslideCount = ActivePresentation.Slides.CountDéfinir newSlide = ActivePresentation.Slides.Add(slideCount + 1, 12)' ou comme ppLayoutBlank = 12Définir newSlide = ActivePresentation.Slides.Add(slideCount + 1, ppLayoutBlank) |
Ajouter une diapositive après la diapositive actuelle
12345 | Dim newSlide As SlideDim currentSlideIndex as IntegercurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexDéfinir newSlide = ActivePresentation.Slides.Add(currentSlideIndex, ppLayoutBlank) |
Supprimer une diapositive
1234 | Dim currentSlideIndex as IntegercurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexActivePresentation.Slides(currentSlideIndex).Delete |
Aller à une diapositive spécifique
12 | ' Cela vous amènera à la diapositive numéro 4Application.ActiveWindow.View.GotoSlide (4) |
Déplacer la diapositive
Vous pouvez déplacer une diapositive de son ancienne position à la nouvelle position
123456 | ' Passer de la diapositive 3 à la première diapositiveDim oldPosition comme entier, dim newPosition comme entieranciennePosition = 3nouvellePosition = 1ActivePresentation.Slides(oldPosition).MoveTo toPos:=newPosition |
Parcourir toutes les diapositives
Vous pouvez faire quelque chose avec chaque diapositive ou parcourir toutes les diapositives pour trouver quelques diapositives et faire quelque chose en utilisant le code ;
123456 | Dim mySlide en tant que diapositivePour chaque mySlide dans ActivePresentation.Slides' Faire quelque chose avec la diapositive actuelle référencée dans la variable 'mySlide'' Debug.Print mySlide.NameDiapositive suivante |
Parcourir toutes les formes de diapositive active
La puissance de PowerPoint peut être réalisée en utilisant « Formes ». Le code ci-dessous parcourt toutes les formes de la diapositive actuelle afin que vous puissiez les manipuler comme vous le souhaitez;
123456789 | Dim currentSlide as SlideDim shp comme formeDéfinir currentSlide = Application.ActiveWindow.View.SlidePour chaque shp dans currentSlide.Shapes' Faire quelque chose avec la forme actuelle référencée dans la variable 'shp'' Par exemple, imprimez le nom de la forme dans la fenêtre d'exécutionDebug.Print shp.NameSuivant |
Parcourez toutes les formes dans toutes les diapositives
Vous pouvez parcourir toutes les formes de la présentation en ajoutant une boucle pour parcourir toutes les diapositives.
123456789 | Dim currentSlide as SlideDim shp comme formePour chaque slide actuel dans ActivePresentation.SlidesPour chaque shp dans currentSlide.Shapes' Faire quelque chose avec la forme actuelle référencée dans la variable 'shp'Debug.Print shp.NameSuivantDiapositive actuelle suivante |
Parcourez toutes les zones de texte de la diapositive active
Les zones de texte sont la forme la plus souvent utilisée dans les présentations PowerPoint. Vous pouvez parcourir toutes les zones de texte en cochant la case "Type de forme". Les TexBox ont le type de forme défini comme la constante VBA msoTextBox (la valeur numérique de la constante est 17)
1234567891011 | Dim currentSlide as SlideDim shp comme formeDéfinir currentSlide = Application.ActiveWindow.View.SlidePour chaque shp dans currentSlide.Shapes' Vérifiez si le type de forme est msoTextBoxSi shp.Type = 17 Then ' msoTextBox = 17'Imprimer le texte dans la zone de texteDebug.Print shp.TextFrame2.TextRange.TextFin siSuivant |
Parcourez toutes les zones de texte dans toutes les diapositives
Encore une fois, vous pouvez parcourir toutes les zones de texte de la présentation en ajoutant une boucle pour parcourir toutes les diapositives.
1234567891011 | Dim currentSlide as Slide Dim shp as ShapePour chaque slide actuel dans ActivePresentation.SlidesPour chaque shp dans currentSlide.Shapes' Vérifiez si le type de forme est msoTextBoxSi shp.Type = 17 Then ' msoTextBox = 17' Faire quelque chose avec la zone de texte référencée dans la variable 'shp'Debug.Print shp.TextFrame2.TextRange.TextFin siSuivantDiapositive actuelle suivante |
Copier les diapositives sélectionnées dans une nouvelle présentation PPT
Pour copier certaines diapositives dans une nouvelle présentation, sélectionnez d'abord les diapositives souhaitées dans la présentation existante, puis exécutez le code ci-dessous;
123456789101112131415161718 | Courant faiblePrésentation en tant que présentationDim currentSlide as SlideDim newPrésentation en tant que présentation' Enregistrer la référence à la présentation actuelleDéfinir currentPresentation = Application.ActivePresentation' Enregistrer la référence à la diapositive actuelleDéfinir currentSlide = Application.ActiveWindow.View.Slide' Ajouter une nouvelle présentation et enregistrer dans une référenceDéfinir NewPresentation = Application.Presentations.Add' Copier les diapositives sélectionnéesSélection.Copie' Collez-le dans une nouvelle présentationNouveauPrésentation.Diapositives.Coller |
Copier la diapositive active à la fin de la présentation active
12345 | ' Copier la diapositive actuelleApplication.ActiveWindow.View.Slide.Copy' Coller à la finActivePresentation.Slides.Coller |
Exemples de macros PowerPoint utiles
Voici quelques exemples de macros utiles montrant comment effectuer des tâches. Ceux-ci démontreront également les concepts décrits ci-dessus.
Changer la diapositive pendant le diaporama
1234567891011 | Sub ChangeSlideDuringSlideShow()Dim SlideIndex As IntegerDim SlideIndexPrécédent en tant qu'entier' Changer la diapositive actuelle à la diapositive 4 sélectionnée pendant le diaporamaSlideIndex = 4' L'index de la fenêtre de diaporama actuelle est 1 dans la collection SlideShowWindowsSlideIndexPrevious = SlideShowWindows(1).View.CurrentShowPositionSlideShowWindows(1).View.GotoSlide SlideIndexFin du sous-marin |
Changer la police sur toutes les diapositives dans toutes les zones de texte
123456789101112131415 | Sub ChangeFontOnAllSlides()Dim mySlide As slideDim shp en tant que forme' Modifier la taille de la police sur toutes les diapositivesPour chaque mySlide dans ActivePresentation.SlidesPour chaque shp dans mySlide.ShapesSi shp.Type = 17 Then ' msoTextBox = 17' Changer la taille de la police à 24shp.TextFrame.TextRange.Font.Size = 24Fin siSuivantSuivant mySlideFin du sous-marin |
Changer la casse de majuscule à normale dans toutes les zones de texte
123456789101112131415 | Sub ChangeCaseFromUppertoNormal()Dim mySlide As slideDim shp en tant que forme' Changer de majuscule à casse normale pour toutes les diapositivesPour chaque mySlide dans ActivePresentation.SlidesPour chaque shp dans mySlide.ShapesSi shp.Type = 17 Then ' msoTextBox = 17' Changer les majuscules en casse normaleshp.TextFrame2.TextRange.Font.Allcaps = FalseFin siSuivantSuivant mySlideFin du sous-marin |
Basculer la casse entre majuscule et normale dans toutes les zones de texte
12345678910111213141516 | Sub ToggleCaseBetweenUpperAndNormal()Dim mySlide As slideDim shp en tant que forme' Basculer entre les majuscules et les casses normales pour toutes les diapositivesPour chaque mySlide dans ActivePresentation.SlidesPour chaque shp dans mySlide.ShapesSi shp.Type = 17 Then ' msoTextBox = 17' Basculer entre les majuscules et les casses normalesshp.TextFrame2.TextRange.Font.Allcaps = _Pas shp.TextFrame2.TextRange.Font.AllcapsFin siSuivantSuivant mySlideFin du sous-marin |
Supprimer le soulignement des descendants
En typographie, un descendant est la partie d'une lettre qui s'étend sous la ligne de base d'une police. Dans la plupart des polices, les descendants sont réservés aux caractères minuscules tels que g, j, q, p, y et parfois f.
Lorsque vous soulignez du texte, il n'est pas joli sous les descendeurs. Voici le code pour supprimer le soulignement de tous ces caractères g, j, p, q et y dans l'ensemble de la présentation.
1234567891011121314151617181920212223242526 | Sub RemoveUnderlineFromDescenders()Dim mySlide As slideDim shp en tant que formeDim descenders_list en tant que chaînePhrase faible en tant que chaîneDim x aussi long' Supprimer les soulignements des descendantsdescenders_list = "gjpqy"Pour chaque mySlide dans ActivePresentation.SlidesPour chaque shp dans mySlide.ShapesSi shp.Type = 17 Then ' msoTextBox = 17' Supprimer le soulignement des lettres "gjpqy"Avec shp.TextFrame.TextRangephrase = .TextePour x = 1 à Len(.Text)Si InStr(descenders_list, Mid$(phrase, x, 1)) > 0 Alors.Caractères(x, 1).Font.Underline = FalseFin siSuivant xTerminer parFin siSuivantSuivant mySlideFin du sous-marin |
Supprimer les animations de toutes les diapositives
Utilisez le code ci-dessous pour supprimer toutes les animations définies dans une présentation.
123456789101112 | Sous-SupprimerAnimationsFromAllSlides()Dim mySlide As slideDim j'aussi longtempsPour chaque mySlide dans ActivePresentation.SlidesPour i = mySlide.TimeLine.MainSequence.Count To 1 Step -1'Supprimer chaque animationmySlide.TimeLine.MainSequence.Item(i).DeleteEnsuite jeSuivant mySlideFin du sous-marin |
Enregistrer la présentation au format PDF
Vous pouvez facilement enregistrer la présentation active au format PDF.
1234567891011 | Sub SavePresentationAsPDF()Dim pptName en tant que chaîneDim PDFName en tant que chaîne' Enregistrer PowerPoint au format PDFpptName = ActivePresentation.FullName' Remplacer l'extension de fichier PowerPoint dans le nom en PDFPDFName = Gauche(pptName, InStr(pptName, ".")) & "pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2Fin du sous-marin |
Rechercher et remplacer du texte
Vous pouvez rechercher et remplacer du texte dans toutes les zones de texte de toutes les diapositives. Après la première instance du texte que vous souhaitez rechercher (définie par findWhat), vous devez parcourir la commande Rechercher pour rechercher d'autres instances, le cas échéant.
123456789101112131415161718192021222324252627282930313233 | Sub FindAndReplaceText()Dim mySlide As slideDim shp en tant que formeDim findWhat As StringDim replaceWith en tant que chaîneDim ShpTxt en tant que TextRangeDim TmpTxt As TextRangefindWhat = "chacal"replaceWith = "renard"' Rechercher et rechercher et remplacerPour chaque mySlide dans ActivePresentation.SlidesPour chaque shp dans mySlide.ShapesSi shp.Type = 17 Then ' msoTextBox = 17Définir ShpTxt = shp.TextFrame.TextRange'Rechercher la première instance du mot "Rechercher" (s'il existe)Définir TmpTxt = ShpTxt.Replace(trouver Quoi, _Replacewhat:=replaceWith, _Mots entiers : = vrai)'Rechercher des instances supplémentaires du mot "Rechercher" (s'il existe)Faire sans TmpTxt n'est rienDéfinir ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)Définir TmpTxt = ShpTxt.Replace(trouver Quoi, _Replacewhat:=replaceWith, _Mots entiers : = vrai)BoucleFin siSuivantSuivant mySlideFin du sous-marin |
Exporter la diapositive en tant qu'image
Vous pouvez exporter la diapositive actuelle (ou toute autre diapositive) sous forme d'image PNG ou JPG (JPEG) ou BMP.
1234567891011121314 | Sub ExportSlideAsImage()Dim imageType As StringDim pptName en tant que chaîneDim imageName en tant que chaîneDim mySlide As slide' Exporter la diapositive actuelle vers l'imageimageType = "png" ' ou jpg ou bmppptName = ActivePresentation.FullNameimageName = Left(pptName, InStr(pptName, ".")) & imageTypeDéfinir mySlide = Application.ActiveWindow.View.slidemySlide.Export imageName, imageTypeFin du sous-marin |
Redimensionner l'image pour couvrir toute la diapositive
1234567891011121314151617181920212223242526 | Sub ResizeImageToCoverFullSlide()Dim mySlide As slideDim shp en tant que forme' Redimensionner l'image à la taille complète de la diapositive' Modifier la hauteur et la largeur de la première forme sur la diapositive actuelle' pour s'adapter aux dimensions de la diapositiveDéfinir mySlide = Application.ActiveWindow.View.slideDéfinir shp = mySlide.Shapes(1)'''' Remplacez les deux déclarations ci-dessus par'' la déclaration suivante si vous voulez'' développe la forme actuellement sélectionnée'' donnera une erreur si rien n'est sélectionné'Set shp = ActiveWindow.Selection.ShapeRange(1)Avec shp.LockAspectRatio = Faux.Height = ActivePresentation.PageSetup.SlideHeight.Width = ActivePresentation.PageSetup.SlideWidth.Gauche = 0.Haut = 0Terminer parFin du sous-marin |
Quitter tous les diaporamas en cours
Si vous avez plusieurs diaporamas ouverts en même temps, vous pouvez tous les fermer à l'aide de la macro ci-dessous.
1234567 | Sous-ExitAllRunningSlideShows()Faire pendant que SlideShowWindows.Count > 0SlideShowWindows(1).View.ExitBoucleFin du sous-marin |
Automatiser PowerPoint à partir d'Excel
Vous pouvez également vous connecter à PowerPoint via d'autres applications (comme Excel et Word). Comme première étape, vous devez vous référer à une instance de PowerPoint.
Il y a deux façons de le faire - reliure précoce et reliure tardive .
Ouvrir PowerPoint - Reliure anticipée
Dans « Early Binding », vous devez définir explicitement une référence à « Microsoft PowerPoint 16 Object Library » (pour MS Office 2022) dans le VBE (Visual Basic Editor) à l'aide de l'option Tools->References.
123 | ' Reliure anticipéeDim pptApp en tant qu'applicationDéfinir pptApp = Nouveau PowerPoint.Application |
Ouvrir PowerPoint - Reliure tardive
Dans « Late Binding », la variable d'application est déclarée en tant qu'objet et le moteur VBA se connecte à l'application appropriée au moment de l'exécution.
123 | ' Reliure tardiveDim pptApp en tant qu'objetDéfinir pptApp = CreateObject("PowerPoint.Application") |
Rendre l'application visible
Après avoir défini la référence à l'application PowerPoint, vous devrez peut-être la rendre visible.
1 | pptApp.Visible = Vrai |
Manipuler PowerPoint
Vous pouvez utiliser toutes les méthodes pour manipuler les présentations, à partir de PowerPoint, décrites ci-dessus à partir d'Excel en ajoutant simplement la référence à PowerPoint créée par vous ci-dessus.
Par exemple
1 | Présentations.Ouvrir ("Ma Présentation.pptx") |
doit être utilisé comme ça
1 | pptApp .Presentations.Open ("Ma Présentation.pptx") |
Fermer l'application
Une fois que vous avez terminé ce que vous vouliez faire avec l'application PowerPoint, vous devez la fermer et libérer la référence.
12 | pptApp.QuitterDéfinir pptApp = Rien |
Copier d'Excel vers PowerPoint
Ce code copiera une plage d'Excel vers PowerPoint :
Noter: Il est resté aussi simple que possible de montrer comment une plage d'Excel peut être copiée vers PowerPoint à l'aide de VBA.
12345678910111213141516171819 | Sous copyRangeToPresentation()' Ouvrir une nouvelle instance PowerPointDéfinir pptApp = CreateObject("PowerPoint.Application")Avec pptApp' Créer une nouvelle présentationDéfinir ppt = .Presentations.Add' Ajouter une diapositive viergeDéfinir newSlide = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12' Copier la plage de la feuille active dans ExcelActiveSheet.Range("A1:E10").Copier' Coller dans Powerpoint en tant qu'imagenewSlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile' Basculer vers PowerPoint.ActiverTerminer parFin du sous-marin |
FAQ PowerPoint VBA
Que sont les macros en PPT ?
Une macro est un terme général qui fait référence à un ensemble d'instructions de programmation qui automatisent les tâches. Les macros PowerPoint (PPT) automatisent les tâches dans PowerPoint à l'aide du langage de programmation VBA.
Comment utiliser VBA dans PowerPoint ?
Pour utiliser VBA dans PowerPoint, ouvrez l'éditeur VBA (ALT + F11 ou Developer > Visual Basic).
Comment créer une macro dans PowerPoint ?
1. Ouvrez l'éditeur VBA (ALT + F11 ou Développeur > Visual Basic)
2. Allez dans Insertion > Module pour créer un module de code
3. Tapez « Sub HelloWorld » et appuyez sur Entrée
4. Entre les lignes « Sub HelloWorld » et « End Sub », tapez « MsgBox « Hello World ! »
5. Vous avez créé une macro !
6. Appuyez maintenant sur « F5 » pour exécuter la macro
Écrit par : Vinamra Chandra