Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

FAQ PowerPointConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 150, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireMacros, VBA et fonctions avancéesMacros, VBA et fonctions avancées Généralités

Il faut vérifier le niveau de sécurité qui est appliqué à PowerPoint sur l'ordinateur. Pour ce faire, il faut aller dans le menu Outils, choisir Macros et choisir ensuite Sécurité. Si le niveau de sécurité est élevé ou très élevé, il faudra l'abaisser faute de quoi les macros sont désactivées.

Créé le 9 novembre 2007  par annedeblois

Vous ne trouverez pas l'enregistreur de macro sous PowerPoint, celui-ci a été retiré visuellement.
Cependant il existe une astuce, il suffit d'utiliser la combinaison Alt+O M E, mais l'enregistreur de macro sous PowerPoint a des limites.
Vous pouvez toujours taper du code, car l'éditeur VB existe toujours.

Mis à jour le 18 novembre 2008  par Philippe JOCHMANS

C'est normal, car les diapositives PowerPoint ne génèrent pas de procédures événementielles, contrairement aux feuilles Excel, aux pages Word ou aux formulaires Access.
Pour qu'une diapositive apparaisse, il faut positionner sur celle-ci un contrôle issu de la barre d'outils Boîte à Outils Contrôles. À ce moment vous pourrez mettre du code dans la diapositive.

Créé le 27 février 2008  par Philippe JOCHMANS

Oui:

vba
Sélectionnez

Presentation("MaPres").Slides.Count
Créé le 9 novembre 2007  par bidou

1. ajoutez un CommandButton dans la 2eme diapositive (diapositive B dans votre projet)

2. rattachez à ce bouton la macro de lancement du UserForm

vba
Sélectionnez

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

3. Créez un UserForm dans la présentation , puis ajoutez-y un objet Image (nommé Image1)

vba
Sélectionnez

Option Explicit
 
Dim nomImage As String
 
Private Sub UserForm_Initialize()
   nomImage = "C:\imageTemp.jpg"
   'supprime l'image si elle existe déja
   If Dir(nomImage) <> "" Then Kill nomImage
 
   'exporte le 1er Slide au format image
   '(correspond au slide A dans ton projet )
   ActivePresentation.Slides(1).Export nomImage, "jpg"
   DoEvents
 
  'affiche l'image dans l'USF
  With Me.Image1
       .Picture = LoadPicture(nomImage)
       .PictureSizeMode = fmPictureSizeModeStretch
  End With
End Sub
 
Private Sub UserForm_Terminate()
  'supprime l'image lors de la fermeture de l'USF
  If Dir(nomImage) <> "" Then Kill nomImage
End Sub

4. Testez votre présentation PowerPoint : lors du lancement du Userform, une image du 1er slide va être créée puis être affichée dans l'objet image.

Créé le 9 novembre 2007  par bidou

Après avoir créé dans une diapositive, une zone de texte et un bouton (issus de la boite à outils contrôle), il suffit d'insérer dans la page de code :

vba
Sélectionnez

Private Sub CommandButton1_Click()
   Select Case TextBox1
     Case "Blanc", "blanc", "Blanche", "blanche"
       SlideShowWindows(1).View.GotoSlide (7)
     Case Else
       SlideShowWindows(1).View.GotoSlide (6)
   End Select
End Sub

Il ne reste plus qu'à enchaîner le questionnaire à partir de la diapo 7 (dans l'exemple); quant à la diapo 6, elle permet de faire apparaître un message d'erreur, et un lien qui permet de renvoyer soit au début du questionnaire, soit à la suite ou autre.

Note:
Ne pas oublier de cocher l'option «Visionné sur une borne (plein écran)» dans «Paramètre du diaporama» (dans le menu Diaporama), afin d'empêcher le défilement des diapos autrement que par les liens prévus.

Créé le 31 octobre 2007  par bidou

Une petite piste en utilisant la valeur de NOW pour limiter le temps maxi d'un diaporama.

vba
Sélectionnez

Sub TempsMax()
HeureFermeture = Now + TimeValue("00:00:10")
While Now < HeureFermeture 
  With ActivePresentation.SlideShowSettings
     .ShowType = ppShowTypeSpeaker
     .LoopUntilStopped = msoTrue
     .ShowWithNarration = msoTrue
     .ShowWithAnimation = msoTrue
     .RangeType = ppShowAll
     .AdvanceMode = ppSlideShowUseSlideTimings
     .PointerColor.RGB = RGB(255, 0, 0)
     .Run
  End With
Wend
ActivePresentation.Close
End Sub
Créé le 31 octobre 2007  par ouisansdoute

Indiquez l'argument WithWindow:=msoFalse lors de l'ouverture de la présentation.
Nota:
Cette solution ne permet pas l'utilisation de la méthode Select lors de la manipulation du fichier PPT par macro

vba
Sélectionnez

Sub MasquerPPT()
    Dim pptDoc As Presentation
    Set pptDoc = Application.Presentations.Open("C:\maPresentation.ppt", WithWindow:=msoFalse)
End Sub
Créé le 4 octobre 2007  par SilkyRoad

L'influence éventuelle des vitesses et style de transition n'est pas prise en compte.

vba
Sélectionnez

Sub Defile()
    Dim i As Integer
    Dim x As Long        
    For i = 1 To Ppp1.Slides.Count
        x = x + Ppp1.Slides(i).SlideShowTransition.AdvanceTime
    Next i        
    MsgBox x
End Sub
Créé le 4 octobre 2007  par SilkyRoad
vba
Sélectionnez

 'expression.InsertFromFile(FileName, Index, SlideStart, SlideEnd)
 'Cet exemple montre comment insérer les diapositives 1 à 4 provenant
 'de "maPresentation2.ppt", à la suite de la diapositive 2 dans la présentation "maPresentation1.ppt"
 
 Sub InsereDiapositives()
 Dim pptDoc As Presentation
 
 Set pptDoc = Application.Presentations.Open(FileName:="C:\maPresentation1.ppt")
 
 'expression.InsertFromFile(FileName, Index, SlideStart, SlideEnd)
 'Cet exemple montre comment insérer les diapositives 1 à 4 provenant
 'de "maPresentation2.ppt", à la suite de la diapositive 2 dans la présentation "maPresentation1.ppt"
 pptDoc.Slides.InsertFromFile "C:\maPresentation2.ppt", 2, 1, 4
End Sub
Créé le 4 octobre 2007  par SilkyRoad

Pour avoir des infos-bulles lors du passage de la souris sur un élément d'une diapositive on peut utiliser les liens hypertextes.

Voici comment faire une info-bulle personnalisée.

Collez ce code dans un module standard.

vba
Sélectionnez

Public Sub AffichageBulleForm(shpSelect As Shape)
    ' ===== déclaration des variables =====
    Dim shpBulle As Shape   ' il s'agit de l'info-bulle qui sera crée
    Dim sldParent As Slide  ' il s'agit d'une slide (diapositive ou se trouve la forme
    Dim t As Date           ' va servir pour la temporisation de l'affichage de l'info-bulle
 
    ' ===== affectation =====
    ' on récupére le slide
    Set sldParent = shpSelect.Parent
 
    ' ===== on crée la bulle =====
 
    Set shpBulle = sldParent.Shapes.AddShape(msoShapeRectangle, shpSelect.Left + shpSelect.Width, shpSelect.Top, 100, 100)
    With shpBulle
        .Name = "Bulle"
        ' couleur de fond
        .Fill.ForeColor.RGB = RGB(150, 150, 120)
        ' texte de la bulle
        .TextFrame.TextRange.Text = "toto"
        .TextFrame.WordWrap = msoTrue
        ' la forme s'adapte au texte
        .TextFrame.AutoSize = ppAutoSizeShapeToFitText
        ' couleur de la ligne
        .Line.ForeColor.RGB = RGB(200, 200, 100)
        ' position
        .Top = shpSelect.Top + 10
        .Left = shpSelect.Left + 10
    End With
 
    ' ===== on lance la temporisation ====
    t = Timer + 1
    Do Until Timer > t
        DoEvents
    Loop
 
    ' ===== on détruit la bulle =====
    sldParent.Shapes("Bulle").Delete
End Sub

Ensuite sur l'action du survol de votre élément par la souris, sélectionnez la routine AffichageBulleForm. L'info-bulle que vous pouvez paramétrer en forme et couleur, apparaîtra 1 seconde.

Remarque : Toutes les formes n'ont pas le même effet, ici, il s'agit d'un rectangle tout simple.

Créé le 13 juillet 2008  par Philippe JOCHMANS


Lorsque vous effectuez des créations dynamiques ou des suppressions d'objets par programmation dans un diaporama PowerPoint, et que vous ne voulez pas enregistrer celle-ci, un message vous demande lors de la fermeture du diaporama l'enregistrement de celui-ci.

Pour éviter ce message, utilisez le code suivant avant la fermeture de votre diaporama

 
Sélectionnez

Application.DisplayAlerts = ppAlertsAll
Créé le 13 juillet 2008  par Philippe JOCHMANS

Les instructions suivantes vous permettent de récupérer les coordonnées du centre d'une diapositive (en points).

Milieu par rapport à la hauteur
Sélectionnez

ActivePresentation.PageSetup.SlideHeight / 2
Milieu par rapport à la largeur
Sélectionnez

ActivePresentation.PageSetup.SlideWidth / 2

Cela est très utile lorsque l'on veut positionner des éléments.

Le point d'origine étant le coin haut-gauche de la diapositive.

Créé le 1er août 2009  par Philippe JOCHMANS

Si vous possédez un fichier PowerPoint avec des routines que vous utilisez souvent, vous pouvez rajouter à la barre d'outils d'Accès rapide des macros.

Cliquez sur la flèche qui se trouve sur la droite de la barre d'outils, et sélectionnez Autres commandes

Image non disponible

Dans la première liste déroulante sélectionnez Macros

Image non disponible
  1. Sélectionnez la macro.
  2. Cliquez sur le bouton Ajouter pour mettre cette macro dans la deuxième liste.
  3. Cliquez sur le bouton Modifier si vous voulez changer l'icône de la macro.
Image non disponible


Vous pouvez ainsi créer des fichiers PowerPoint 2007 différents pour chaque type d'actions ou de présentations que vous souhaitez faire.

Créé le 4 août 2009  par Philippe JOCHMANS

Lorsqu'on lance une routine de traitement sur plusieurs diapositives, il est possible d'en sélectionner certaines.

Pour cela on utilise la fonction Array pour sélectionner les diapositives à traiter.

L'exemple suivant rajoute une zone de texte aux diapositvies 1,3 et 5 d'une présentation.

 
Sélectionnez

Public Sub AjoutNom()
 
    ' déclaration
    Dim objPresentation As SlideRange
    Dim objSld As Slide
    Dim objShp As Shape
 
    ' affectation des slides qui doivent être traités
    Set objPresentation = ActivePresentation.Slides.Range(Array(1, 3, 5))
 
    ' parcours
    For Each objSld In objPresentation
        Set objShp = objSld.Shapes.AddTextbox(msoTextOrientationHorizontal, 25, 25, 300, 50)
        With objShp.TextFrame.TextRange
            .Text = "Offert par www.developpez.com"
            .Font.Italic = msoTrue
        End With
    Next objSld
End Sub
Créé le 4 août 2009  par Philippe JOCHMANS

Les différentes visionneuses PowerPoint ne gèrent pas les fichiers comportant du code VBA.

Si vous envoyez un fichier PowerPoint comportant du code, la personne qui le recevra devra posséder PowerPoint et non seulement la visionneuse.

Créé le 4 août 2009  par Philippe JOCHMANS

Lorsque vous créez un code à l'aide de l'enregistreur de macro, vous retrouvez de nombreuses fois l'instruction Selection. Cette instruction ne fonctionne lorsque vous passez en mode diaporama, car il n'y a pas de sélection, il faut donc nommer correctement vos objets pour agir sur ceux-ci.

Créé le 4 août 2009  par Philippe JOCHMANS
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.