Exemples et didacticiel de macros VBA PowerPoint

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

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave