Creation PPT d'une "fonction" ou "procédure"
Hello tout le monde ... J'espere que vous vous portez bien ...
Je suis un peu embêté , je dois réaliser un PPT a l'aide d'infos issues d'un tableau excel et selon plusieurs conditions qui vont dupliquer autant de fois que nécessaire le Slide #2 d'un PowerPoint (potx).
Cette partie de duplication fonctionne très bien car elle est dans la procédure d'origine ... mais pour éviter d'avoir à écrire la procédure d'ajout d'information indéfiniment ... j'ai voulu écrire ma procédure d'ajout d'abord sous forme de fonction puis finalement sous forme de procédure ... mais aucune des deux ne marche..
Extrait de ma procédure de base
Sub Export_Powerpoint()
Dim appPpt As Object 'la variable qui contiendra l'application
Dim Pptpre As Object 'la variable qui contiendra la présentation
Dim nbshpe As Byte
Dim shpe As Object 'pour manipuler un objet Forme
Dim sld As Object 'pour manipuler un objet diapositive
Dim MySlide As Slide
Dim iSlide As Integer
'-----------------------------------------------
Set appPpt = CreateObject("Powerpoint.Application")
appPpt.Visible = True
Set Pptpre = appPpt.Presentations.Open(Filename:=ThisWorkbook.Path & "\FichierTest.potx")
Application.ScreenUpdating = False
Application.CutCopyMode = False
Sheets("DATA").Select
iSlide = 3
'APPEL DE L'AJOUT D'UNE DATA
AddShapeForData 3, iSlide, Pptpre
'APPEL DE L'AJOUT D'UNE FORME
AddShapeForCDS iSlide, 22.21, 0.28, 1.28, 1.4, "TOTO", PptpreMa procédure Ajout DATA
Sub AddShapeForData(Column As Integer, NumSlide As Integer, Pptpre As Object)
ActiveSheet.Cells(11, Column).Select
Selection.Copy
Pptpre.Slides(NumSlide).Shapes.PasteSpecial ppPasteShape
nbshpe = Pptpre.Slides(NumSlide).Shapes.Count
With Pptpre.Slides(NumSlide).Shapes(nbshpe)
.TextFrame.AutoSize = ppAutoSizeNone
.Left = Application.CentimetersToPoints(1.47)
.Top = Application.CentimetersToPoints(5.58)
.Height = Application.CentimetersToPoints(0.8)
.Width = Application.CentimetersToPoints(1.2)
.TextFrame.TextRange.Font.Name = "Arial"
.TextFrame.VerticalAnchor = msoAnchorMiddle
.TextFrame.TextRange.Font.Size = 14
.TextFrame.TextRange.Paragraphs.ParagraphFormat.Alignment = ppAlignCenter
End With
End SubBien sur autant vous dire que l'action Shapres.PasteSpecial ppPasteShape fonctionne bien dans la procédure principale mais si je veux l'appeler ca me met l'erreur suivante (que ce soit une procédure appelée ou une fonction)
Shapes.PasteSpecial : Invalid Request. The Specific data type is unavailable.
En gros donc si qq'un à une solution pour me permet d'avoir ma procédure principale et dans une boucle appeler la procédure de copie de la donnée dans PPT ...
Merci pour votre aide
excellente fin de journée à tous et surtout portez vous bien !
Je m'arrache les cheveux
Je pense que c'est impossible ...
En fait ce qu'il faudrait que j'arrive à faire c'est lors de l'appel de la procédure, vérifié si le fichier PowerPoint est déjà ouvert et l'utilisé comme activePresentation mais je sais pas faire
En fait je dois appeler X fois la procédure d'ajout d'un Slide + X fois ajout de Shape dans ce Slide ... Bref ca fait beaucoup du coup je voulais ecrire qu'une seule fois ma procédure et l'appeler à chaque besoin ...
Mais je sais pas faire
Merci pour votre aide
Autocorrection :
En fait j'ai réussi en indiquant le code suivant avant :
Je passe pptAppName en paramètre (nom du fichier PPT qui sert de base et qui est déjà ouvert)
Je passe iSlide étant le numéro de la slide sur laquelle je dois travailler
tout marche maintenant
Dim Powerpointapp As PowerPoint.Application
Dim myPresentation As PowerPoint.Application
Set Powerpointapp = CreateObject("Powerpoint.application")
Set MySlide = Powerpointapp.Presentations(pptAppName).Slides(iSlide)