Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Problème pour un simple select

3 réponses
Avatar
HD
Bonjour,

Je suis en train de réaliser un script qui va balancer des images d'Excel
dans PowerPoint... mon problème est que si ça fonctionne bien pour la
première diapo, ça plante à la 2e. J'ai un message "Erreur d'exécution
'1004': La méthode 'Range' de l'objet '_Global' a échoué" sur un simple
select d'une plage de donnée... :-/

Sub Xls_a_Ppt()
Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim AWkb As String

AWkb = ActiveWorkbook.Name
ModelePowerPoint 'ouvre une instance PPT avec mon modèle
Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide

For Each sh In Workbooks(AWkb).Worksheets
Windows(AWkb).Activate
sh.Select
Range(ActiveSheet.PageSetup.PrintArea).Select 'Mon plantage
s'effectue ici au 2e passage sur une feuille où j'ai bien une zone
d'impression...
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set PPSlide =
PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
PPSlide.Shapes.Paste.Select
Set PPSlide = Nothing
Set Diapo =
PPPres.Slides.Add(Index:=PPApp.ActiveWindow.Selection.SlideRange.SlideIndex
+ 1, Layout:=ppLayoutBlank)
Next sh
Set PPPres = Nothing
Set PPApp = Nothing
End Sub


--
@+
HD

3 réponses

Avatar
isabelle
bonjour HD,

essaie avec Application.GoTo Range(...

isabelle



Le 2011-01-24 10:45, HD a écrit :
Bonjour,

Je suis en train de réaliser un script qui va balancer des images d'Excel
dans PowerPoint... mon problème est que si ça fonctionne bien pour la
première diapo, ça plante à la 2e. J'ai un message "Erreur d'exécution
'1004': La méthode 'Range' de l'objet '_Global' a échoué" sur un simple
select d'une plage de donnée... :-/

Sub Xls_a_Ppt()
Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim AWkb As String

AWkb = ActiveWorkbook.Name
ModelePowerPoint 'ouvre une instance PPT avec mon modèle
Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide

For Each sh In Workbooks(AWkb).Worksheets
Windows(AWkb).Activate
sh.Select
Range(ActiveSheet.PageSetup.PrintArea).Select 'Mon plantage
s'effectue ici au 2e passage sur une feuille où j'ai bien une zone
d'impression...
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set PPSlide > PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
PPSlide.Shapes.Paste.Select
Set PPSlide = Nothing
Set Diapo > PPPres.Slides.Add(Index:=PPApp.ActiveWindow.Selection.SlideRange.SlideIndex
+ 1, Layout:=ppLayoutBlank)
Next sh
Set PPPres = Nothing
Set PPApp = Nothing
End Sub


Avatar
michdenis
Bonjour,

Roule cette macro, cela va te dire si tu as vraiment une zone d'impression pour chacune des feuilles
Si cette zone n'existe pas pour certaines feuilles, il ne faut pas te surprendre que ta macro plante !
'------------------------
Sub test()
For Each Sh In Workbooks(AWkb).Worksheets
MsgBox Sh.PageSetup.PrintArea
Next
End Sub
'------------------------


MichD
--------------------------------------------
"HD" a écrit dans le message de groupe de discussion : ihk6uq$1drr$

Bonjour,

Je suis en train de réaliser un script qui va balancer des images d'Excel
dans PowerPoint... mon problème est que si ça fonctionne bien pour la
première diapo, ça plante à la 2e. J'ai un message "Erreur d'exécution
'1004': La méthode 'Range' de l'objet '_Global' a échoué" sur un simple
select d'une plage de donnée... :-/

Sub Xls_a_Ppt()
Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim AWkb As String

AWkb = ActiveWorkbook.Name
ModelePowerPoint 'ouvre une instance PPT avec mon modèle
Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide

For Each sh In Workbooks(AWkb).Worksheets
Windows(AWkb).Activate
sh.Select
Range(ActiveSheet.PageSetup.PrintArea).Select 'Mon plantage
s'effectue ici au 2e passage sur une feuille où j'ai bien une zone
d'impression...
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set PPSlide PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
PPSlide.Shapes.Paste.Select
Set PPSlide = Nothing
Set Diapo PPPres.Slides.Add(Index:=PPApp.ActiveWindow.Selection.SlideRange.SlideIndex
+ 1, Layout:=ppLayoutBlank)
Next sh
Set PPPres = Nothing
Set PPApp = Nothing
End Sub


--
@+
HD
Avatar
HD
Si cette zone n'existe pas pour certaines feuilles,
il ne faut pas te surprendre que ta macro plante !


Effectivement, j'ai une feuille où la zone d'impression renvoyée est vide...
alors que j'ai pourtant bien une zone d'impression. Je peux imprimer les
données de la feuille en question sans problème. Mais c'est vrai que dans
"Mise en page / Feuille / Zone d'impression" je n'ai rien... Il me faut donc
plutôt utiliser Application.UsedRange qui correspond donc à ce que j'imprime
lorsque la zone d'impression n'est pas définie... Ok, c'est corrigé.

Merci à vous deux.

--
@+
HD