Exporter d'Excel vers Powerpoint
Le problème:
Automatiser la mise à jour de présentation Powerpoint à partir de données d'une feuille de calcul Excel.
Par exemple, si on veut produire une présentation dans un format défini une fois pour toutes mais que l'on reconstruit tous les mois. Il est toujours fastidieux de "coller" au bon endroit les chiffres ou les graphiques.
Une solution:
On est là dans le domaine des macros. C'est même exactement leur rôle: reproduire des tâches répétitives. Sous Excel, il est possible d'enregistrer des macros et de se contenter de les rejouer ensuite. Malheureusement, cette fonctionnalité n'est pas proposée par Powerpoint et elle ne permet pas d'enregistrer le passage d'informations d'une application bureautique à une autre.
Il faut donc construire cette transmission entre outils "à la main". L'exemple ci dessous a pour principal objectif d'inclure un graphique dans une "diapo".
Le code VBA pour y arriver:
Sub ExporteVerPresModele()
'=============================================================
' myWobgho
'
' Exemple d'exportation depuis Excel vers Powerpoint
'
' Attention les bibliothèques Excel et Powerpoint
' (Outils Reference)
'
'=============================================================
Dim PptDoc As PowerPoint.Presentation
Dim Diapo As PowerPoint.Slide
Dim Sh As PowerPoint.Shape
Dim ShR As PowerPoint.ShapeRange
Dim Cs1 As ColorScheme
Dim NbShpe As Integer
Dim wPresname As String
Dim wDirPresname As String
Dim PptApp As Variant
Set PptApp = CreateObject("Powerpoint.Application")
wPresname = Worksheets("Parm").Range("B6")
' Fichier contenant une présentation "modèle" à compléter
' Son nom est présumé se trouver en cellule B6 de la feuille "Parm" dans Excel
wDirPresname = ActiveWorkbook.Path
' Répertoire où se trouve la feuille Excel, et aussi la présentation à compléter
wFullPresname = wDirPresname & "\" & wPresname
On Error GoTo ErrFic
Set PptDoc = PptApp.Presentations.Open(wFullPresname)
With PptDoc
' Ajoute une slide (jsute pour exemple)
wNbSlides = .Slides.Count + 1
.Slides.Add Index:=wNbSlides, Layout:=ppLayoutBlank
'Crée une zone de texte (AddLabel)
Set Sh = .Slides(wNbSlides).Shapes.AddLabel(Orientation:=msoTextOrientationHorizontal, _
Left:=100, Top:=100, Width:=150, Height:=60)
With Sh.TextFrame.TextRange
.Text = Worksheets("Parm").Range("A4")
' Ajout d'un texte lu dans la feuille excel
With .Font
.Name = "Times New Roman"
.Size = 30
.Bold = msoFalse
.Italic = msoFalse
.Underline = msoFalse
.Shadow = msoFalse
.Emboss = msoFalse
.BaselineOffset = 0
.AutoRotateNumbers = msoFalse
.Color = RGB(255, 100, 255)
.Color.SchemeColor = ppTitle
End With
End With
' Ajoute une autre slide où on va copier tableau et graphique
wNbSlides = .Slides.Count + 1
.Slides.Add Index:=wNbSlides, Layout:=ppLayoutBlank
' Copie du tableau de données
' Il est présumé se trouver dans l'onglet "Data" sous Excel
Worksheets("Data").Select
wBool = ActiveWindow.DisplayGridlines
If wBool Then
ActiveWindow.DisplayGridlines = False
End If
' Données en tableau dans le range spécifié
Worksheets("Data").Range("A3:B9").Copy
Set ShR = .Slides(wNbSlides).Shapes.PasteSpecial(ppPasteRTF, msoFalse)
With ShR
.Top = 90
.Left = 10
.Height = 150
End With
' Graphique présumé être dans "Graphique 2"
' Pour connaître le nom de l'objet Excel, il suffit d'enregistrer une macro
' où on sélectionne le graphique
Worksheets("Data").ChartObjects("Graphique 2").Activate
ActiveChart.ChartArea.Copy
' Les deux lignes ci dessus peuvent être direcetement recopiées de la macro enregistrée sous Excel
Set ShR = .Slides(wNbSlides).Shapes.PasteSpecial(ppPasteMetafilePicture, msoFalse)
With ShR
.Top = 90
.Left = 150
.Height = 250
End With
End With
ErrFic:
MsgBox "Le fichier " & wPresname & " n'exsite pas dans le répertoire"
Exit Sub
End Sub