VBA - Piloter Powerpoint avec Excel

Fermé
fred43st Messages postés 7 Date d'inscription jeudi 5 juillet 2007 Statut Membre Dernière intervention 10 septembre 2007 - 24 juil. 2007 à 11:11
 deepsoul94 - 25 juil. 2012 à 15:52
Bonjour à tous,

Je voudrais pouvoir piloter powerpoint avec Excel, donc la, le code VBA devrait créer une présentation PPT à partir d'excel mais quand je le lance, il me renvoie le message d'erreur suivant :

Erreur de compilation : Sub ou Fonction non définie

avec une erreur sur la 1ere ligne.

Ci dessous le code :

====================================================================

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
PptApp.Quit

MsgBox "Opération terminée."
End Sub

===================================================================

En vous remerciant d'avance :D

A bientot

Fred43st
A voir également:

3 réponses

Utilisateur anonyme
24 juil. 2007 à 16:10
Bonjour,

il vous faut différencier les objets de scripting de type [ Variant ] présent sous tous les VBAs

et les objets VBAs spécifiques à l'application.

La première instruction de votre routine appelle :

Dim PptApp As PowerPoint.Application

un objet non connu de Excel ???

2 solutions !

*** Première

Soit vous utilisé les objets de scripting et vous déclarer votre variable de type [ Variant ]

Dim PptApp As Variant
Set PptApp = CreateObject("Powerpoint.Application")

*** Seconde

Vous charger la référence Micorsoft PowerPoint xx Objects Library

voilà ça devrait rouler !
Lupin
3
Bonjour Lupin,

Tout d'abord, je vous remercie pour vos solutions.

J'ai testé les 2 solutions, et il me renvoie une petite erreur.

"Erreur d'exécution '1004' : Impossible de lire la propriété ChartObjects de la classe Worksheet."

Il s'agit d'un erreur au niveau de la Ligne 31 (ActiveSheet.ChartObjects(1).Copy)


Je suis en train de voir si je peux corriger ce bug mais mes connaissances en VBA sont encore très limitées pour l'instant.

Merci beaucoup.

A bientot

Fred43st
0
Utilisateur anonyme
25 juil. 2007 à 16:17
re :

normal, l'instruction juste avant place PP en avant plan !

Set Diapo = .Slides.Add(Index:=2, Layout:=ppLayoutBlank)

'copie le 1er graphique contenu dans la feuille Excel active
ActiveSheet.ChartObjects(1).Copy


vous devez ramener Excel au premier plan par :

Windows("MonfichierExcel.xls").Activate
ActiveSheet.ChartObjects(1).Copy

Lupin
0
Je ne suis pas sûr à 100% de ma remarque, mais au lieu d'utiliser le type "variant" ne serait -il pas plus efficace en termes de rapidité d'éxécution d'utiliser le type "Object"?

Cordialement
0