Bonjour,
J'utilise le code suivant (merci silkyroad)
Cependant il colle sur la feuille ws ce qu'il a en mémoire du copier (par exemple si avant d'appuyer sur le bouton de mon userform, j'ai fait un copier coller de "toto" il va me coller toto sur la feuille ws au lieu de coller le snapshot. par si j'appuie une seconde fois sur imprimer il m'imprimera mon userform (en gros il a un temps de retard pour s'imprimer) de la même manière si j'imprime mon userform une première fois (en cliquant 2 fois sur imprimer) et que je modifie mon userform alors de la meme manière il faudra que je clique 2 fois sur imprimer pour pouvoir imprimer le userform à jour. Je ne comprends pas pourquoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Option Explicit Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Sub CommandButton1_Click() Dim Ws As Worksheet 'Copie d'écran de la forme active keybd_event vbKeySnapshot, 1, 0&, 0& DoEvents 'Ajoute une feuille pour coller l'image de la forme Set Ws = Sheets.Add Ws.Paste 'impression centrée dans la page With Ws .PageSetup.CenterHorizontally = True .PageSetup.CenterVertically = True .PrintOut End With End Sub
alors que si je fais un coller dans word manuellement j'ai bien l'userform qui se colle correctement ... (ceci signifie donc que mon snpshot est correct et qu'il réalise le coller avant le copier ou que excel ne rafraichit pas la mémoire du coller
Merci de votre aide
J'ai un peu modifier mais ça ne fonctionne toujours pas. Voici mon code à présent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Option Explicit Private Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Sub CB_Imprimer_Click() 'recopie d'un module présent sur le net dédié à l'impression (légèrement adapté à notre cas) On Error GoTo ErrorHandler 'gestion des erreurs si erreur alors aller au point ErrorHandler (voir en bas) Dim Ws As Worksheet keybd_event vbKeySnapshot, 1, 0&, 0& 'Copie d'écran de la forme active=copie l'userform DoEvents Set Ws = Sheets.Add 'Ajoute une feuille pour coller l'image de la forme Ws.Paste 'colle le contenu du snapshot dans la feuille 'impression centrée dans la page With Ws .PageSetup.Orientation = xlLandscape 'Met la feuille en mode paysage .PageSetup.Zoom = False .PageSetup.FitToPagesTall = 1 'dit que le contenu du classeur ne doit être imprimé que sur une feuille en hauteur .PageSetup.FitToPagesWide = 1 'dit que le contenu du classeur ne doit être imprimé que sur une feuille en largeur .PageSetup.CenterHorizontally = True 'centre horizontalement sur la page .PageSetup.CenterVertically = True 'centre verticalement End With U2.Hide 'masque l'userform2 Application.Dialogs(xlDialogPrint).Show 'montre la boite de dialogue imprimer U2.Show 'remontre l'userform2 Application.DisplayAlerts = False 'empèche les message d'alerte type etes vous sur de vouloir supprimer Ws.Delete 'supprimer la feuille créée Application.DisplayAlerts = True 'rétabli les messages d'alerte Exit Sub ErrorHandler: 'point de gestion des erreurs MsgBox ("Erreur grave rencontrée : " & Err.Description) 'si erreur alors message qui affiche "erreur rencontrée avec le descriptif de l'erreur" Application.DisplayAlerts = True On Error Resume Next 'après avoir validé l'erreur on passe à la suite de la macro End Sub
Partager