Problème 1004 - Capture d'écran

Fermé
zapp56 - 12 mars 2016 à 09:44
 zapp56 - 12 mars 2016 à 13:55
Bonjour,

Je suis sur Excel 2003. Je souhaite réaliser une capture d'écran de mon userform, la coller sur ma "Feuil1" pour pouvoir l'imprimer.
J'ai trouvé une méthode légère et simple sur internet.

Pour ce faire j'utilise un header à mon userform :

Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)


puis dans le "commandbutton_click" concerné :

    keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents


Sheets("Feuil1").Activate
Range("A1").Select
ActiveSheet.Paste


Je me retrouve avec l'erreur 1004 - "La méthode paste de la classe WorkSheet a échoué".

A savoir que si je choisis "débogage" et que je relance là où ça s'est arrêté, ça marche...

Une idée ?
A voir également:

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
12 mars 2016 à 12:02
Bonjour,

Chez moi votre code marche sans erreur.

Question: pourquoi passer par du code pour la recopie d'ecran ??
0
Je souhaite faire une copie d'écran pour la coller sur une feuille et l'imprimer en "paysage". J'ai un bouton "imprimer" sur mon userform, et pour cela je rends invisible certains boutons, labels, etc (pour n'imprimer que le tableau)

Je ne comprends pas l'occurrence de ce problème, à vrai dire. J'ai utilisé une autre méthode : (trouvée sur internet)
Je la lance depuis le bouton imprimer, qui ouvre un module (le code n'est donc plus dans mon usf)


'///////// Mon Header
Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Public Const VK_SNAPSHOT = 44
Public Const VK_LMENU = 164
Public Const KEYEVENTF_KEYUP = 2
Public Const KEYEVENTF_EXTENDEDKEY = 1

'///////// Ma Macro
Sub PrintCfg()
Application.ScreenUpdating = False
DoEvents
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY + KEYEVENTF_KEYUP, 0
DoEvents
Workbooks.Add
'Application.Wait Now + TimeValue("00:00:05")
With ActiveSheet
.PasteSpecial Format:="Bitmap", Link:=False, DisplayAsIcon:=False
.Range("A1").Activate
.PageSetup.Orientation = xlLandscape
.PageSetup.LeftMargin = Application.InchesToPoints(0)
.PageSetup.RightMargin = Application.InchesToPoints(0)
.PageSetup.TopMargin = Application.InchesToPoints(0.3)
.PageSetup.BottomMargin = Application.InchesToPoints(0)
.PageSetup.HeaderMargin = Application.InchesToPoints(0)
.PageSetup.FooterMargin = Application.InchesToPoints(0)
.PageSetup.PrintHeadings = False
.PageSetup.PrintGridlines = False
.PageSetup.PrintComments = xlPrintNoComments
.PageSetup.CenterHorizontally = False
.PageSetup.CenterVertically = False
.PageSetup.Draft = False
.PageSetup.PaperSize = xlPaperA4
.PageSetup.Order = xlDownThenOver
.PageSetup.BlackAndWhite = False
.PageSetup.Zoom = 100
End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveWorkbook.Close False
Application.ScreenUpdating = True

End Sub


Cette méthode fonctionne parfaitement si je sélectionne mon usf manuellement dans la fenêtre de développement, que je "F5" et que j'appuie sur le bouton "imprimer".
Mais si je lance depuis Workbook_Open() [l'ouverture du classeur] alors ça plante sur la ligne (".pastespecial...") avec l'erreur sus-nommée.
0
zapp56 > zapp56
12 mars 2016 à 13:55
Je crois avoir trouvé la réponse. Comme un grand. (Je prie)

Il semblerait que ce soit la mise en commentaire de la ligne
'Application.Wait Now + TimeValue("00:00:05")


qui fait que le code s'exécute sans laisser le temps au pc d'exécuter
Workbooks.Add


Ce qui fait que le code cherche une "ActiveSheet" qui n'a pas encore été créée. D'où la nécessité de laisser l' "Application.wait". Bien sûr j'ai réduit le temps d'attente. Dans ma source, la valeur initiale était "... + Timevalue("00:00:01")

En espérant que ceci pourra aider quelqu'un...
0