Bonjour à tous,
j'ai récupéré cette macro, mais je ne sais pas comment lancer une Function...
Le reste est à priori bien paramétré... Et j'ai ajouté la référence Microsoft PowerPoint
'Public Function GenererPPT() As PowerPoint.Presentation
Public Function GenererPPT() As Object
Dim pathPPT As String, tabVarTxt As ListObject, tabVarArea As ListObject, rowVar As ListRow, nbShapes As Long, iShape As Long
'Dim pptApp As PowerPoint.Application, pptPres As PowerPoint.Presentation, pptSlide As PowerPoint.Slide, pptShape As PowerPoint.Shape
Dim pptApp As Object, pptPres As Object, pptSlide As Object, pptShape As Object
Dim fso As Object
'récupérer le tableau de variables
Set tabVarTxt = Me.ListObjects("Tab_Vars_Txt")
Set tabVarArea = Me.ListObjects("Tab_Vars_Zones")
'créer une nouvelle présentation à partir du modèle
pathPPT = Me.Range("PathModelePPT").Text
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(pathPPT) Then Stop 'si arrêt ici, le modèle ppt défini sur la feuille excel n'a pas été trouvé
On Error Resume Next
Set pptApp = GetObject(, "PowerPoint.Application")
If pptApp Is Nothing Then Set pptApp = CreateObject("PowerPoint.Application")
If pptApp Is Nothing Then Stop 'si arrêt ici, on n'a pas réussi à ouvrir powerpoint
On Error GoTo 0
Set pptPres = pptApp.Presentations.Open(pathPPT, 1)
DoEvents
'boucler sur chaque forme de chaque diapositive
For Each pptSlide In pptPres.Slides
pptSlide.Select '/!\ ** obligé pour éviter un problème dans le centrage des Shapes (ReplacePptShapeArea)
nbShapes = pptSlide.Shapes.Count
For iShape = nbShapes To 1 Step -1
Set pptShape = pptSlide.Shapes(iShape)
'remplacer les variables "textes" une par une
For Each rowVar In tabVarTxt.ListRows
ReplacePptShapeText pptShape, "${" & rowVar.Range(1, 1).Text & "}", rowVar.Range(1, 2).Text
Next rowVar
'remplacer les variables "zones"
ReplacePptShapeArea pptShape, tabVarArea
Next iShape
Next pptSlide
pptPres.Slides(1).Select
'pptPres.SaveAs ...
'pptPres.Close
ExitSub:
Set fso = Nothing
If Not pptApp Is Nothing Then
If pptApp.Presentations.Count > 0 Then
pptApp.Visible = True
Else
pptApp.Quit
End If
End If
Set GenererPPT = pptPres
Set pptPres = Nothing
Set pptApp = Nothing
End Function
j'ai récupéré cette macro, mais je ne sais pas comment lancer une Function...
Le reste est à priori bien paramétré... Et j'ai ajouté la référence Microsoft PowerPoint
'Public Function GenererPPT() As PowerPoint.Presentation
Public Function GenererPPT() As Object
Dim pathPPT As String, tabVarTxt As ListObject, tabVarArea As ListObject, rowVar As ListRow, nbShapes As Long, iShape As Long
'Dim pptApp As PowerPoint.Application, pptPres As PowerPoint.Presentation, pptSlide As PowerPoint.Slide, pptShape As PowerPoint.Shape
Dim pptApp As Object, pptPres As Object, pptSlide As Object, pptShape As Object
Dim fso As Object
'récupérer le tableau de variables
Set tabVarTxt = Me.ListObjects("Tab_Vars_Txt")
Set tabVarArea = Me.ListObjects("Tab_Vars_Zones")
'créer une nouvelle présentation à partir du modèle
pathPPT = Me.Range("PathModelePPT").Text
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(pathPPT) Then Stop 'si arrêt ici, le modèle ppt défini sur la feuille excel n'a pas été trouvé
On Error Resume Next
Set pptApp = GetObject(, "PowerPoint.Application")
If pptApp Is Nothing Then Set pptApp = CreateObject("PowerPoint.Application")
If pptApp Is Nothing Then Stop 'si arrêt ici, on n'a pas réussi à ouvrir powerpoint
On Error GoTo 0
Set pptPres = pptApp.Presentations.Open(pathPPT, 1)
DoEvents
'boucler sur chaque forme de chaque diapositive
For Each pptSlide In pptPres.Slides
pptSlide.Select '/!\ ** obligé pour éviter un problème dans le centrage des Shapes (ReplacePptShapeArea)
nbShapes = pptSlide.Shapes.Count
For iShape = nbShapes To 1 Step -1
Set pptShape = pptSlide.Shapes(iShape)
'remplacer les variables "textes" une par une
For Each rowVar In tabVarTxt.ListRows
ReplacePptShapeText pptShape, "${" & rowVar.Range(1, 1).Text & "}", rowVar.Range(1, 2).Text
Next rowVar
'remplacer les variables "zones"
ReplacePptShapeArea pptShape, tabVarArea
Next iShape
Next pptSlide
pptPres.Slides(1).Select
'pptPres.SaveAs ...
'pptPres.Close
ExitSub:
Set fso = Nothing
If Not pptApp Is Nothing Then
If pptApp.Presentations.Count > 0 Then
pptApp.Visible = True
Else
pptApp.Quit
End If
End If
Set GenererPPT = pptPres
Set pptPres = Nothing
Set pptApp = Nothing
End Function