Power Point VBA – Exemples et Didacticiels de Macros pour PowerPoint

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on janvier 16, 2022

In this Article

Il s’agit d’un guide complet pour automatiser PowerPoint à l’aide de macros VBA (Visual Basic for Applications). Vous trouverez ci-dessous de nombreux exemples utiles.


PDF VBA (Téléchargements gratuits)

Téléchargez notre tutoriel VBA gratuit sur Microsoft PowerPoint! Ou des didacticiels VBA pour d’autres programmes Office!

vba powerpoint tutorial pdf

Télécharger


Tutoriel VBA (Macros) pour PowerPoint

Enregistrer en Tant que Présentation Prenant en Charge les Macros

La présentation contenant le code VBA doit être enregistrée sous forme de présentation PowerPoint prenant en charge les macros (*.pptm)

Activer l’Onglet « Développeur » du Ruban

Vous devez activer l’onglet Développeur du ruban avant de créer du code VBA. Pour ce faire, choisissez Fichier -> Options, puis cliquez sur « Personnaliser le ruban » et cochez la case située à côté de l’onglet « Développeur » dans le volet de droite.

Créer une Macro PowerPoint

Voici un exemple simple de macro VBA pour PowerPoint :

Sub EnregistrerPrésentationEnPDF()
    Dim pptNom As String
    Dim pdfNom As String
    
    ' Sauvegarder PowerPoint en tant que PDF
    pptNom = ActivePresentation.FullName
    
    ' Remplacer l'extension du fichier PowerPoint dans le nom par PDF
    pdfNom = Left(pptNom, InStr(pptNom, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat pdfNom, 2 ' ppFixedFormatTypePDF = 2
 
End Sub

Elle enregistre la présentation active au format PDF. Chaque ligne de code fait ce qui suit :

  • Crée des variables pour le nom du PowerPoint et le nom du PDF
  • Attribue le nom de la présentation active à la variable pptNom
  • Crée le nom complet du PDF
  • Enregistre la présentation au format PDF

Application PowerPoint

Lorsque le code VBA est exécuté 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.

Application.Presentations.Add

' ou sans référence explicite
Presentations.Add

Ouvrir une Nouvelle Présentation

Pour ouvrir une nouvelle présentation vierge, utilisez la méthode Add de la collection Application.Presentations

Presentations.Add

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

Presentations.Open ("MaPré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 devriez affecter la présentation que vous ouvrez à une variable afin de pouvoir la manipuler selon vos besoins.

Dim ppt As Presentation
Set ppt = Presentations.Open("MaPrésentation.pptx")

Référence à la Présentation Active

Utilisez la référence ActivePresentation pour manipuler la présentation active dans l’interface graphique lorsque le code VBA est exécuté.

' Imprimez le nom de la présentation active dans la fenêtre d'exécution
Debug.Print ActivePresentation.Name

Sauvegarde de la Présentation Active

L’instruction ci-dessous enregistre la présentation active si elle a déjà été enregistrée. Si elle ne l’a pas été, la boîte de dialogue « Enregistrer sous » s’affichera.

ActivePresentation.Save

Fermer la Présentation Active

L’instruction ci-dessous permet de fermer la présentation active, même si elle n’a pas été enregistrée après la dernière modification.

ActivePresentation.Close

Références Utiles

Attribuer une Présentation Existante à une Variable (par son nom)

Dim maPrésentationParNom As Presentation
Set maPrésentationParNom = Application.Presentations("MaPrésentation")

Attribution d’une Diapositive Active à une Variable

Dim diapoActive As Slide
Set diapoActive  = Application.ActiveWindow.View.Slide

Affectation d’une Diapositive à une Variable par Index

Dim maDiapo As Slide
Set maDiapo = ActivePresentation.Slides(11)

Compter le Nombre de Diapositives

Dim nombreDiapos As Long
nombreDiapos = ActivePresentation.Slides.Count

Obtenir le Numéro d’Index de la Diapositive Active

Dim indexDiapoActive As Integer
indexDiapoActive = Application.ActiveWindow.View.Slide.SlideIndex

Ajout d’une Diapositive Vierge à la Fin du Diaporama

Dim nombreDiapo As Long
Dim newSlide as Slide

nombreDiapo = ActivePresentation.Slides.Count
Set nouvelleDiapo = ActivePresentation.Slides.Add(nombreDiapo + 1, 12)

' ou puisque ppLayoutBlank = 12
Set nouvelleDiapo = ActivePresentation.Slides.Add(nombreDiapo + 1, ppLayoutBlank)

Ajout d’une Diapositive Après la Diapositive Actuelle

Dim nouvelleDiapo As Slide
Dim indexDiapoActive as Integer

indexDiapoActive = Application.ActiveWindow.View.Slide.SlideIndex
Set nouvelleDiapo = ActivePresentation.Slides.Add(indexDiapoActive , ppLayoutBlank)

Supprimer une Diapositive

Dim indexDiapoActive as Integer

indexDiapoActive = Application.ActiveWindow.View.Slide.SlideIndex
ActivePresentation.Slides(indexDiapoActive).Delete

Aller à une Diapositive Spécifique

' Ceci vous amènera à la diapositive numéro 4
Application.ActiveWindow.View.GotoSlide (4)

Déplacer une Diapositive

Vous pouvez déplacer une diapositive de son ancienne position à une nouvelle position

' Déplacez la diapositive 3 vers la première diapositive
Dim anciennePos as integer, dim nouvellePos as integer

anciennePos = 3
nouvellePos = 1
ActivePresentation.Slides(anciennePos).MoveTo toPos:=nouvellePos

Boucle sur Toutes les Diapositives

Vous pouvez faire quelque chose avec chaque diapositive ou passer par toutes les diapositives pour trouver quelques diapositives et faire quelque chose avec en utilisant le code suivant :

Dim Diapo as Slide

For Each Diapo In ActivePresentation.Slides
   ' Faites quelque chose avec la diapositive actuellement référencée dans la variable 'Diapo'
   ' Debug.Print Diapo.Name
Next Diapo

Boucle sur Toutes les Formes de la Diapositive Active

La puissance de PowerPoint peut être réalisée en utilisant les objets ‘Shapes’ (Formes). Le code ci-dessous passe en boucle toutes les formes de la diapositive active afin que vous puissiez les manipuler comme vous le souhaitez ;

Dim diapoActive as Slide
Dim shp as Shape

Set diapoActive = Application.ActiveWindow.View.Slide
For Each shp in diapoActive.Shapes
  ' Faites quelque chose avec la forme référencée par la variable 'shp'
  ' Par exemple, imprimer le nom de la forme dans la fenêtre d'exécution
  Debug.Print shp.Name
Next shp

Boucle sur Toutes les Formes dans Toutes les Diapositives

Vous pouvez parcourir en boucle toutes les formes de la présentation en ajoutant une boucle pour parcourir toutes les diapositives.

Dim diapoActive as Slide
Dim shp as Shape

For Each diapoActive In ActivePresentation.Slides
  For Each shp In diapoActive.Shapes
    ' Faites quelque chose avec la forme référencée par la variable 'shp'
    Debug.Print shp.Name
  next shp
Next diapoActive

Boucle sur Toutes les Boîtes de Texte de la Diapositive Active

Les boîtes de texte sont les formes les plus souvent utilisées dans les présentations PowerPoint. Vous pouvez parcourir en boucle toutes les boîtes de texte en recherchant les objets de type « Shape Type ». Le type de forme des boîtes de texte est défini par la constante VBA msoTextBox (la valeur numérique de cette constante est 17)

Dim diapoActive As Slide
Dim shp As Shape

Set diapoActive = Application.ActiveWindow.View.Slide
For Each shp In diapoActive.Shapes
  ' Vérifier si le type de forme est msoTextBox
  If shp.Type = 17 Then ' msoTextBox = 17
    ' Afficher le texte de la boite dans la fenêtre d'exécution
    Debug.Print shp.TextFrame2.TextRange.Text
  End If
Next shp

Boucle sur Toutes les Boîtes de Texte de Toutes les Diapositives

Une fois encore, vous pouvez parcourir toutes les zones de texte de la présentation en ajoutant une boucle pour parcourir toutes les diapositives.

Dim diapo As Slide
Dim shp As Shape

For Each diapo In ActivePresentation.Slides
  For Each shp In diapo.Shapes
    ' Vérifiez si le type de forme est msoTextBox
    If shp.Type = 17 Then ' msoTextBox = 17
      ' Faites quelque chose avec la TextBox référencée par la variable 'shp'
      Debug.Print shp.TextFrame2.TextRange.Text
    End If
  Next shp
Next diapo

End Sub

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 ;

Dim présentationActive As Presentation
Dim diapoActive As Slide
Dim nouvellePrésentation As Presentation

' Sauvegardez la référence à la présentation actuelle
Set présentationActive = Application.ActivePresentation

' Enregistrer la référence à la diapositive actuelle
Set diapoActive = Application.ActiveWindow.View.Slide

' Ajouter une nouvelle présentation et sauvegarder la référence
Set nouvellePrésentation = Application.Presentations.Add

' Copie des diapositives sélectionnées
Selection.Copy

' Collez-les dans la nouvelle présentation
nouvellePrésentation.Slides.Paste

Copie de la Diapositive Active à la Fin de la Présentation Active

' Copier la diapositive actuelle
Application.ActiveWindow.View.Slide.Copy

' Coller à la fin
ActivePresentation.Slides.Paste

Exemples de Macros PowerPoint Utiles

Voici quelques exemples de macro utiles montrant comment effectuer des tâches. Ils démontrent également les concepts décrits ci-dessus.

Changer de Diapositive Pendant le Diaporama

Sub ChangerDiapositivePendantPrésentation()
    Dim indexDiapo As Integer
    Dim indexDiapoPrécédente As Integer
 
    ' Changez la diapositive actuelle en diapositive sélectionnée 4 pendant le diaporama
    indexDiapo = 4
    
    ' L'index de la fenêtre actuelle du diaporama est 1 dans la collection SlideShowWindows
    indexDiapoPrécédente = SlideShowWindows(1).View.CurrentShowPosition
    SlideShowWindows(1).View.GotoSlide indexDiapo
     
End Sub

Changer la Police sur Toutes les Diapositives dans Toutes les Boîtes de Texte

Sub ChangerPoliceSurToutesLesDiapos()
    Dim maDiapo As Slide
    Dim shp As Shape
    
    ' Changez la taille de la police sur toutes les diapositives
    For Each maDiapo In ActivePresentation.Slides
      For Each shp In maDiapo.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Changez la taille de la police à 24
          shp.TextFrame.TextRange.Font.Size = 24
        End If
      Next shp
    Next maDiapo
 
End Sub

Passer de la Casse Majuscule à la Casse Normale dans Toutes les Boîtes de Texte

Sub ModifierCasseMajusculeVersNormale()
    Dim maDiapo As Slide
    Dim shp As Shape
    
    ' Passage de la majuscule à la casse normale pour toutes les diapositives
    For Each maDiapo In ActivePresentation.Slides
      For Each shp In maDiapo.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Transformez les majuscules en casse de type normale
          shp.TextFrame2.TextRange.Font.Allcaps = False
        End If
      Next shp
    Next maDiapo
 
End Sub

Basculer la Casse entre Majuscule et Normale dans Toutes les Boîtes de Texte

Sub BasculerCasseEntreMajusculeEtNormale()
    Dim maDiapo As Slide
    Dim shp As Shape
 
    ' Basculez entre les majuscules et les minuscules pour toutes les diapositives
    For Each maDiapo In ActivePresentation.Slides
      For Each shp In maDiapo.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          ' Basculer entre les majuscules et les majuscules normales
          shp.TextFrame2.TextRange.Font.Allcaps = _
            Not shp.TextFrame2.TextRange.Font.Allcaps
        End If
      Next shp
    Next maDiapo
 
End Sub

Supprimer le Soulignement des Descendantes

En typographie, une descendante est la partie d’une lettre qui s’étend sous la ligne de base d’une police. Dans la plupart des polices, les descendantes sont réservés aux caractères minuscules tels que g, j, q, p, y, et parfois f.

Lorsque vous soulignez un texte, l’interaction avec les descendantes n’est parfois pas très esthétique. Voici un code qui permet de supprimer le soulignement de tous ces caractères g, j, p, q et y dans l’ensemble de la présentation.

Sub EnleverSoulignementDescendantes()
    Dim diapo As Slide
    Dim shp As Shape
    Dim liste_Descendantes As String
    Dim phrase As String
    Dim x As Long
    
    ' Suppression du soulignement des descendantes
    liste_Descendantes = "gjpqy"
    For Each diapo In ActivePresentation.Slides
      For Each shp In diapo.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
         ' Supprimez le soulignement des lettres "gjpqy"
         With shp.TextFrame.TextRange
            phrase = .Text
           For x = 1 To Len(.Text)
             If InStr(liste_Descendantes, Mid$(phrase, x, 1)) > 0 Then
              .Characters(x, 1).Font.Underline = False
             End If
           Next x
         End With
       End If
      Next shp
    Next diapo
 
End Sub

Supprimer les Animations de Toutes les Diapositives

Utilisez le code ci-dessous pour supprimer toutes les animations définies dans une présentation.

Sub EnleverLesAnimationToutesDiapositives()
    Dim diapo As Slide
    Dim i As Long
 
    For Each diapo In ActivePresentation.Slides
      For i = diapo.TimeLine.MainSequence.Count To 1 Step -1
       ' Suppression de chaque animation
       diapo.TimeLine.MainSequence.Item(i).Delete
      Next i
    Next diapo
     
End Sub

Enregistrer la Présentation au Format PDF

Vous pouvez facilement enregistrer la présentation active au format PDF.

Sub EnregistrerPrésentationEnPDF()
    Dim pptNom As String
    Dim pdfNom As String
    
    ' Sauvegarder PowerPoint en tant que PDF
    pptNom = ActivePresentation.FullName
    
    ' Remplacer l'extension du fichier PowerPoint dans le nom par PDF
    pdfNom = Left(pptNom, InStr(pptNom, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat pdfNom, 2 ' ppFixedFormatTypePDF = 2
 
End Sub

Recherche et Remplacement de Texte

Vous pouvez rechercher et remplacer du texte dans toutes les boîtes de texte de toutes les diapositives. Après la première instance du texte que vous voulez trouver (définie par trouverQuoi), vous devez boucler la commande Find pour trouver les autres instances, le cas échéant.

Sub TrouverEtRemplaceTexte()
    Dim diapo As Slide
    Dim shp As Shape
    Dim trouverQuoi As String
    Dim remplacerPar As String
    Dim ShpTxt As TextRange
    Dim TmpTxt As TextRange

    trouverQuoi = "chacal"
    remplacerPar = "fox"
     
    ' Recherche et remplacement
    For Each diapo In ActivePresentation.Slides
      For Each shp In diapo.Shapes
        If shp.Type = 17 Then ' msoTextBox = 17
          Set ShpTxt = shp.TextFrame.TextRange
          ' Recherche de la première instance du mot "Find" (s'il existe)
          Set TmpTxt = ShpTxt.Replace(trouverQuoi, _
             Replacewhat:=remplacerPar, _
             WholeWords:=True)
     
          'Trouver toute instance supplémentaire du mot "Find" (s'il existe)
          Do While Not TmpTxt Is Nothing
            Set ShpTxt = ShpTxt.Characters(TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)
            Set TmpTxt = ShpTxt.Replace(trouverQuoi, _
              Replacewhat:=remplacerPar, _
              WholeWords:=True)
          Loop
        End If
      Next shp
    Next diapo
 
End Sub

Exporter une Diapositive en Tant qu’Image

Vous pouvez exporter la diapositive active (ou toute autre diapositive) sous forme d’image PNG ou JPG (JPEG) ou BMP.

Sub ExporterDiapoEnImage()
    Dim typeImage As String
    Dim pptNom As String
    Dim nomImage As String
    Dim maDiapo As Slide
    
    ' Exportation de la diapositive actuelle vers une image
    typeImage = "png" ' ou jpg ou bmp
    pptNom = ActivePresentation.FullName
    nomImage = Left(pptNom, InStr(pptNom, ".")) & typeImage
    Set maDiapo = Application.ActiveWindow.View.Slide
    maDiapo.Export nomImage, typeImage
 
End Sub

Redimensionner l’Image pour Couvrir Toute la Diapositive

Sub RedimensionnerImagePourCouvrirTouteLaDiapo()
    Dim maDiapo As Slide
    Dim shp As Shape
    
 
    ' Redimensionner l'image à la taille de la diapositive complète
    ' Modifier la hauteur et la largeur de la première forme sur la diapositive actuelle
    ' pour s'adapter aux dimensions de la diapositive
    Set maDiapo = Application.ActiveWindow.View.Slide
    Set shp = maDiapo.Shapes(1)
    ''
    '' Remplacez les deux déclarations ci-dessus par
    '' l'instruction suivante si vous voulez
    '' développer la forme actuellement sélectionnée
    '' donnera une erreur si rien n'est sélectionné
    Set shp = ActiveWindow.Selection.ShapeRange(1)
     
    With shp
        .LockAspectRatio = False
        .Height = ActivePresentation.PageSetup.SlideHeight
        .Width = ActivePresentation.PageSetup.SlideWidth
        .Left = 0
        .Top = 0
    End With
 
End Sub

Quitter tous les Diaporamas en Cours

Si vous avez plusieurs diaporamas ouverts en même temps, vous pouvez les fermer tous en utilisant la macro ci-dessous.

Sub QuitterTousLesDiaporamasEnCours()
 
    Do While SlideShowWindows.Count > 0
        SlideShowWindows(1).View.Exit
    Loop
 
End Sub

Automatisation de PowerPoint à Partir d’Excel

Vous pouvez également vous connecter à PowerPoint à partir d’autres applications (comme Excel et Word). Comme première étape, vous devez vous référer à une instance de PowerPoint.

Il existe deux façons de le faire – par liaison anticipée et liaison tardive .

Ouvrir PowerPoint – Liaison Anticipée

Pour utiliser la liaison anticipée vous devez explicitement définir une référence à ‘Microsoft PowerPoint 16 Object Library’ (pour MS Office 2019) dans le VBE (Visual Basic Editor) en utilisant l’option Outils -> Références.

' Liaison Anticipée
Dim pptApp As Application
Set pptApp = New PowerPoint.Application

Ouvrir PowerPoint – Liaison Tardive

En utilisant la liaison tardive la variable d’application est déclarée comme un objet et le moteur VBA se connecte à la bonne application au moment de l’exécution.

' Liaison Tardive
Dim pptApp As Object
Set pptApp = CreateObject("PowerPoint.Application")

Rendre l’Application Visible

Après avoir défini la référence à l’application PowperPoint, vous pouvez avoir besoin de la rendre visible.

pptApp.Visible = True

Manipulation de PowerPoint

Vous pouvez utiliser toutes les méthodes de manipulation des présentations, à l’intérieur de PowerPoint, décrites ci-dessus à partir d’Excel en ajoutant simplement la référence à PowerPoint que vous avez créée ci-dessus.

Par exemple

Presentations.Open("Ma Présentation.pptx")

doit être utilisé comme ceci

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.

pptApp.Quit
Set pptApp = Nothing

Copie d’Excel vers PowerPoint

Ce code va copier une plage d’Excel vers PowerPoint :

Note: Il a été gardé aussi simple que possible pour montrer comment une plage d’Excel peut être copiée vers PowerPoint en utilisant VBA.

Sub CopierPlageVersPrésentation()

' Ouvrir une nouvelle instance de PowerPoint
Set pptApp = CreateObject("PowerPoint.Application")

With pptApp
    ' Créer une nouvelle présentation
    Set ppt = .Presentations.Add
    ' Ajouter une diapositive vierge
    Set newSlide = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12
    ' Copier la plage de la feuille active dans Excel
    ActiveSheet.Range("A1:E10").Copy
    ' Coller dans Powerpoint sous forme d'image
    newSlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile
    ' Passer à PowerPoint
    .activate
End With

End Sub

FAQ sur le VBA dans PowerPoint

Que Sont les Macros dans PPT ?

Une macro est un terme général qui fait référence à un ensemble d’instructions de programmation permettant d’automatiser des tâches. Les macros PowerPoint (PPT) automatisent des 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 Développeur > 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! ». Vous avez créé une macro!
6. Maintenant, appuyez sur ‘F5’ pour exécuter la macro

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA