Bonjour,

J'utilise le code suivant (merci silkyroad)

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
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

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