Carnage029
XLDnaute Occasionnel
Hello a tous,
J'ai creer une macro qui me permet de copier mes objets sur une feuille Excel vers une slide powerpoint (un template ppt)
Le filling des slides se fait grace a une sheet mapping qui va recuperer le nom des onglets a copier ou le titre a mettre etc.
Cependant j'ai quelques soucis (deux en particuliers)
1 - Je n'arrive pas a trouver la bonne commande MSO pour copier le format/mise en pages mais en valeurs (sans lien vers le workbook), ce qui fait que des que je recalcule mon book les slides se mettent malheureusement a jour...
newPowerPoint.CommandBars.ExecuteMso "PasteBitmap"
2 - J'ai un soucis avec le timing de copy, quand je met un breaking point sur Next i, les slides se copient convenablement mais quand je laisse tourner la macro, toutes les copies se font sur la derniere slide de mon template, j'ai essaye de regler ca avec des pauses, sleeps et autres mais rien n'y fait...
Merci beaucoup a vous de vos remarques et aide 🙂
Je veux juste preciser que je ne cherche pas a avoir une solution toute faite mais a comprendre comment faire 🙂
J'ai creer une macro qui me permet de copier mes objets sur une feuille Excel vers une slide powerpoint (un template ppt)
Le filling des slides se fait grace a une sheet mapping qui va recuperer le nom des onglets a copier ou le titre a mettre etc.
Cependant j'ai quelques soucis (deux en particuliers)
1 - Je n'arrive pas a trouver la bonne commande MSO pour copier le format/mise en pages mais en valeurs (sans lien vers le workbook), ce qui fait que des que je recalcule mon book les slides se mettent malheureusement a jour...
newPowerPoint.CommandBars.ExecuteMso "PasteBitmap"
2 - J'ai un soucis avec le timing de copy, quand je met un breaking point sur Next i, les slides se copient convenablement mais quand je laisse tourner la macro, toutes les copies se font sur la derniere slide de mon template, j'ai essaye de regler ca avec des pauses, sleeps et autres mais rien n'y fait...
Code:
Add a reference to the Microsoft PowerPoint Library by:
'1. Go to Tools in the VBA menu
'2. Click on Reference
'3. Scroll down to Microsoft PowerPoint X.0 Object Library, check the box, and press Okay
'First we declare the variables we will be using
Dim newPowerPoint As PowerPoint.Application
Dim activeSlide As PowerPoint.Slide
Dim cht As Excel.ChartObject
Dim sTemplate As String
sTemplate = "Chemin de mon template ppt"
'With Presentations.Open(sTemplate, False, True, True)
'Add slides here
' End With
'Look for existing instance
On Error Resume Next
Set newPowerPoint = GetObject(, "PowerPoint.Application")
On Error GoTo 0
'Let's create a new PowerPoint
If newPowerPoint Is Nothing Then
Set newPowerPoint = New PowerPoint.Application
End If
'Make a presentation in PowerPoint
If newPowerPoint.Presentations.Count = 0 Then
newPowerPoint.Presentations.Open (sTemplate)
End If
'Show the PowerPoint
newPowerPoint.Visible = True
'-----------------------------------------------'
' Loop for the different levels'
'-----------------------------------------------'
Sheets("Export").Activate
For i = 10 To ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row
Dim mysheet As String
mysheet = Cells(i, 2).Text
level1 = Cells(i, 3).Text
level2 = Cells(i, 4).Text
level3 = Cells(i, 5).Text
level4 = Cells(i, 6).Text
level5 = Cells(i, 7).Text
myindex = Cells(i, 1).Value
mytitle = Cells(i, 8).Text
Sheets(mysheet).Activate
Cells(6, 21) = level1
Cells(7, 21) = level2
Cells(8, 21) = level3
Cells(9, 21) = level4
Cells(10, 21) = level5
Application.Calculate
If Not Application.CalculationState = xlDone Then
DoEvents
End If
ActiveSheet.Shapes.SelectAll
Selection.Copy
DoEvents
Set activeSlide = newPowerPoint.ActivePresentation.Slides(myindex)
activeSlide.Shapes("TitleBox").TextFrame.TextRange.Text = mytitle
activeSlide.Select
newPowerPoint.CommandBars.ExecuteMso "PasteBitmap"
newPowerPoint.Activate
AppActivate ("Microsoft PowerPoint")
Set activeSlide = Nothing
AppActivate ("Microsoft Excel")
ActiveWorkbook.Sheets("Export").Activate
Next i
End Sub
Merci beaucoup a vous de vos remarques et aide 🙂
Je veux juste preciser que je ne cherche pas a avoir une solution toute faite mais a comprendre comment faire 🙂
Pièces jointes
Dernière édition: