Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

FAQ ExcelConsultez toutes les FAQ

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

 
OuvrirSommaireLes macros VBApiloter d'autres applications depuis ExcelPiloter PowerPoint

L'exemple proposé nécessite d'activer la référence "Microsoft Powerpoint x.x Object Library".
Dans l'éditeur de macros :
Menu Outils
Références
Cochez la ligne "Microsoft Powerpoint x.x Object Library".
Cliquez sur OK pour valider.
(x.x dépend de la version d'Office installée sur votre poste)

Vba
Sélectionnez

Sub NouvellePresentation()
Dim PptApp As PowerPoint.Application
Dim PptDoc As PowerPoint.Presentation
Dim Diapo As PowerPoint.Slide
Dim Sh As PowerPoint.Shape
Dim Cs1 As ColorScheme
Dim NbShpe As Integer
 
Set PptApp = CreateObject("Powerpoint.Application")
Set PptDoc = PptApp.Presentations.Add
 
With PptDoc
 
    '--- Ajoute un Slide
    .Slides.Add Index:=1, Layout:=ppLayoutBlank
    'Crée une zone de texte (AddLabel)
    Set Sh = .Slides(1).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
        Left:=100, Top:=100, Width:=150, Height:=60)
    'insère la valeur de la Cellule A1 dans une zone de texte
    Sh.TextFrame.TextRange.Text = Range("A1")
    'Modifie la couleur du texte
    Sh.TextFrame.TextRange.Font.Color = RGB(255, 100, 255)
 
 
    '--- Ajoute un nouveau slide et le positionner en 2eme position
    Set Diapo = .Slides.Add(Index:=2, Layout:=ppLayoutBlank)
 
    'copie le 1er graphique contenu dans la feuille Excel active
    ActiveSheet.ChartObjects(1).Copy
    'collage dans la 2eme diapositive
    Diapo.Shapes.Paste
 
    'Compte le nombre de shapes dans la diapositive:
    'le dernier objet inséré correspond à l'index le plus élevé
    NbShpe = Diapo.Shapes.Count
 
    'Renomme et met en forme l'objet collé
    With Diapo.Shapes(NbShpe)
        .Name = "monGraph" 'personnalise le nom
        .Left = 150 'définit la position horizontale dans le slide
        .Top = 100 'définit la position verticale dans le slide
        .Height = 300 'hauteur
        .Width = 400 'largeur
    End With
 
 
    '--- Modifie la couleur de fond dans les différents Slides
    Set Cs1 = .ColorSchemes(3)
    Cs1.Colors(ppBackground).RGB = RGB(225, 233, 200)
    .SlideMaster.ColorScheme = Cs1
End With
 
 
'Sauvegarde la présentation
'dans le meme répertoire que le classeur excel contenant la macro.
PptDoc.SaveAs Filename:=ThisWorkbook.Path & "\" & "NouvellePresentation.ppt"
'ferme la presentation
PptDoc.Close
'ferme powerpoint
PptApp.Quit
 
MsgBox "Opération terminée."
End Sub
Créé le 18 novembre 2008  par SilkyRoad

La procédure montre comment coller une plage de cellules dans une diapositive et insérer le contenu d'une cellule dans une zone de texte de la présentation.

Vba
Sélectionnez

Sub ModifierPresentationExistante()
Dim PptApp As PowerPoint.Application
Dim PptDoc As PowerPoint.Presentation
 
Set PptApp = CreateObject("Powerpoint.Application")
PptApp.Visible = True
Set PptDoc = PptApp.Presentations.Open("C:\LaPresentation.ppt")
 
With PptDoc
    'copie la plage de cellules dans la feuille Excel active
    Feuil1.Range("B1:H5").Copy
    'Effectue un collage dans la 2eme diapositive
    .Slides(2).Shapes.Paste
 
    With .Slides(2).Shapes(.Slides(2).Shapes.Count)
        .Name = "monTableau" 'Renomme l'objet collé
        .Left = 150 'position horizontale dans le slide
        .Top = 100 'position verticale dans le slide
        .Height = 300 'hauteur
        .Width = 400 'largeur
    End With
 
    'insère le contenu de la cellule A1 dans la deuxième zone de texte,
    'du 3eme slide
    .Slides(3).Shapes(2).TextFrame.TextRange.Text = Range("A1")
 
    'sauvegarde la présentation
    .Save
End With
 
'ferme la présentation
PptDoc.Close
'ferme powerpoint
PptApp.Quit
 
End Sub
Créé le 18 novembre 2008  par SilkyRoad

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

Vba
Sélectionnez

Set pptDoc = pptApp.Presentations.Open("C:\maPresentation.ppt", WithWindow:=msoFalse)
Créé le 18 novembre 2008  par SilkyRoad
Vba
Sélectionnez

Dim pwrPoint As PowerPoint.Application
Dim Prez As PowerPoint.Presentation
Dim targetMaj As String
Dim Forme As PowerPoint.Shape
Dim Diapo As PowerPoint.Slide
 
Presentation = ThisWorkbook.Path & "\maPresentation.ppt"
'Le nouveau classeur lié
targetMaj = ThisWorkbook.Path & "\monClasseurMisAJour.xls"
 
Set pwrPoint = CreateObject("PowerPoint.Application")
pwrPoint.Visible = msoTrue
Set Prez = pwrPoint.Presentations.Open(Presentation)
 
'Boucle sur les Slide de la présentation
For Each Diapo In Prez.Slides
    'Boucle sur les formes
    For Each Forme In Diapo.Shapes
        'Vérifie s'il s'agit d'un objet lié
        If Forme.Type = msoLinkedOLEObject Then
            'Vérifie si l'objet lié est un objet Excel
            If Forme.OLEFormat.progID = "Excel.Sheet.8" Then
                'Modifie la source
                Forme.LinkFormat.SourceFullName = targetMaj
                'Mise à jour
                Forme.LinkFormat.Update
        End If
    End If
    Next
Next
 
Prez.Save
'ferme la présentation
Prez.Close
'ferme powerpoint
pwrPoint.Quit
Créé le 18 novembre 2008  par SilkyRoad
Vba
Sélectionnez

Sub MAJ_graphiqueDansPresentation()
Dim appPPT As PowerPoint.Application
Dim Sh As PowerPoint.Shape
Dim Gr As Workbook
 
Set appPPT = CreateObject("PowerPoint.Application")
appPPT.Visible = msoTrue
appPPT.Presentations.Open "C:\maPresentation.ppt"
 
'Copie une plage de cellules dans la feuille active
'Ces données vont être collées dans le classeur incorporé, dans ppt, servant
'de source pour le graphique.
ActiveSheet.Range("A1:G10").Copy
 
'Le classeur incorporé est dans le 1er Slide
With appPPT.ActivePresentation.Slides(1)
    'Boucle sur les formes pour retrouver l'objet Excel
    For Each Sh In .Shapes
        'Verifié s'il s'agit d'un objet incorporé
        If Sh.Type = msoEmbeddedOLEObject Then
            'Vérifie s'il s'agit d'une feuille graphique
            If Sh.OLEFormat.progID = "Excel.Chart.8" Then
                Set Gr = Sh.OLEFormat.Object
                'Colle les données dans la Feuil1 du classeur incorporé
                'La feuil1 contient la source de données pour le graphique
                Gr.Sheets("Feuil1").Range("A1").PasteSpecial
                'réactive la première feuille du classeur incorporé
                '(Le graphique est situé dans ce 1er onglet)
                Gr.Sheets(1).Activate
            End If
        End If
    Next Sh
End With
End Sub
Créé le 18 novembre 2008  par SilkyRoad
Vba
Sélectionnez

Sub piloterPowerPoint()
Dim Ppa As PowerPoint.Application
Dim Ppp1 As PowerPoint.Presentation
 
Set Ppa = New PowerPoint.Application
Ppa.Visible = True
'Ouverture présentation
Set Ppp1 = Ppa.Presentations.Open(Filename:="C:\maPresentation1.ppt")
 
'expression.InsertFromFile(CheminPresentationSource, Index, SlideDebut, SlideFin)
'---------------------------------------------------------------
'Cet exemple montre comment insérer les diapositives 1 à 4 provenant
'de "PresentationSource.ppt" à la suite de la diapositive 2, dans
'la présentation "maPresentation1.ppt".
Ppp1.Slides.InsertFromFile "C:\PresentationSource.ppt", 2, 1, 4
End Sub
Créé le 18 novembre 2008  par SilkyRoad
  

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.