Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Impression d'un userform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

PHV62

XLDnaute Junior
bonjour le forum
je souhaiterai imprimer un userform avec les informations dans les textbox et combobox grace a un bouton

merci d'avance pour votre aide
ph v
 
allez puisque tu aime bien usiner
fait toi plaisir

et de là modifier la chose pour l'envoyer dans le clipBoard
on fait peter GDI+ et on reprend les même et on recommence
on prend le clip et on fout tout là dedans
Lol
l'avantage de celle ci c'est que le userform peut être ou il veut même entre deux ecrans il est capturer en entier
mais!!!!!!!!!! avec le theme classic puisque l'on va chercher les bits dans le hdc avec printwindow
VB:
Option Explicit

Private Declare PtrSafe Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As LongPtr) As LongPtr
Private Declare PtrSafe Function CreateDIBSection Lib "gdi32" (ByVal hdc As LongPtr, pBitmapInfo As BitmapInfo, ByVal un As Long, ByVal lplpVoid As LongPtr, ByVal handle As LongPtr, ByVal dw As Long) As LongPtr
Private Declare PtrSafe Function SelectObject Lib "gdi32" (ByVal hdc As LongPtr, ByVal hObject As LongPtr) As LongPtr
Private Declare PtrSafe Function DeleteObject Lib "gdi32" (ByVal hObject As LongPtr) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal cls As String, ByVal cap As String) As Long
Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, Rc As RECT) As Long
Private Declare PtrSafe Function PrintWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr, ByVal flags As Long) As Long
Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr
Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal uFormat As Long, ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long


Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type

Private Type BitmapInfo
    biSize As Long: biWidth As Long: biHeight As Long: biPlanes As Integer
    biBitCount As Integer: biCompression As Long: biSizeImage As Long
    biXPelsPerMeter As Long: biYPelsPerMeter As Long: biRUsed As Long: biRImportant As Long
End Type
Private Const CF_BITMAP = &H2

Sub ScreenFormCaptureToClipboard(Optional ByVal Usf As Object = Nothing)
    Dim lngLargeur As Long, lngHauteur As Long
    Dim bmiBitmapInfo As BitmapInfo
    Dim lngHdc As LongPtr, lngHBmp As LongPtr, oldObj As LongPtr
    Dim Wind As LongPtr, R As RECT
    
    If Usf Is Nothing Then
        Wind = Application.hwnd
    Else
        Wind = FindWindowA(vbNullString, Usf.Caption)
    End If
    If Wind = 0 Then Exit Sub
    
    GetWindowRect Wind, R
    lngLargeur = R.Right - R.Left
    lngHauteur = R.Bottom - R.Top
    
    With bmiBitmapInfo
        .biBitCount = 32
        .biCompression = 0&
        .biPlanes = 1
        .biSize = Len(bmiBitmapInfo)
        .biHeight = lngHauteur
        .biWidth = lngLargeur
    End With
    
    lngHdc = CreateCompatibleDC(0)
    lngHBmp = CreateDIBSection(lngHdc, bmiBitmapInfo, 0&, ByVal 0&, ByVal 0&, ByVal 0&)
    oldObj = SelectObject(lngHdc, lngHBmp)
    
    PrintWindow Wind, lngHdc, 0
    
    ' ? Copier le bitmap dans le presse-papiers (au lieu de sauvegarder)
    OpenClipboard 0
    EmptyClipboard
    SetClipboardData CF_BITMAP, lngHBmp
    CloseClipboard
    
    ' Attention : on NE détruit PAS le bitmap s’il est dans le presse-papiers !
    SelectObject lngHdc, oldObj
    DeleteObject lngHdc
    
End Sub

et dans le userform
Code:
Private Sub CommandButton1_Click()
    ScreenFormCaptureToClipboard Me
    ActiveSheet.Paste
End Sub


je t'en donne tant que tu veux si ça t'amuse ce genre de truc
🤣 🤣 🤣
 
Dernière édition:
non le but c'est toi qui te le donne le sujet de cette discussion c'est d'imprimer un uf pleine page
Oui, je me donne ce but pour que ça marche dans toutes les configurations.
Tu es parfaitement libre de faire un code avec <Alt> + ScreenPrint qui ne marchera pas chez moi à cause de FastStone FSCapture et chez tous ceux qui ont un outil de capture d'écran.

je n'apporte rien de plus ? c'est quand même moi qui t'ai donné ma fonction perso clipboard
Oui, c'est vrai tu me l'as donné. Merci. Je l'ai utilisée dans une version précédente que j'ai supprimée du fil.
Et pour éviter que tu me le rappelles à tout bout de champ, j'ai créé mon propre code avec l'aide de ChatGPT.
De plus, le code que j'ai créé est capable d'ignorer à la source les marges DWM du UserForm, comme ça rien à faire pour avoir le Print nickel.
 

Pièces jointes

Dernière édition:
Ça ne se produit pas chez moi mais je sais ce que c'est.
Les ColumnWidth et RowHeight sont des propriétés un peu foireuses et l'incrément de 0.1 que j'avais mis ne suffit pas à changer leur valeur, d'où la boucle sans fin.
J'ai donc adapté pour modifier l'incrément quand la valeur ne bouge pas. Ça devrait fixer le problème.

Fichier du Post #47 modifié.
 
du coup j'ai transmis la mienne a chatgpt
voila ca reponse
 
ca marche déjà mieux là
je ne sais pas si c'est le resultat attendu tu me diras

mais c'est très lourd encore quand même on le voit bien avec le sablier

ça scintille moins avec ma version
mais jouer en boucle avec le rowheight et columnwidth c'est très lourd pour Excel
perso j'ai éliminé tout ça de l’équation dans mon concept
et surtout je laisse Excel faire avec les outils dont il est affublé
 
demain j’essaierais de greffer mon snapshot bitblt
je sais pas si ça apportera grand chose mais bon qui tente rien n'a rien
en attendant ici la seule api c'est keyb_event
comme il le dit et c'est important je fait sauter tout les verrous que l'on avait avec les zoom ,pagebreaks, rowheight ,columnwidth , etc....
ma feuille contient une zone d'impression en 21/29.7 et la shape va dedans au centre à ( X % de la plage sur commande ) c'est tout
 
Oui, c'est le résultat attendu.
Chez moi (Core i5) l'attente est d'environ 0.5 secondes. Je pourrais passer l'incrément de 0.1 à 0.5 pour être plus rapide.
Même si c'est le double pour une impression occasionnelle ce n'est pas un problème.
C'est certain qu'avec des calculs ça va plus vite.

demain j’essaierais de greffer mon snapshot bitblt
Si tu utilises ma fonction CopyWindowImageToClipboard() je ne t'en voudrai pas !😎
Elle est courte et gère les marges.
 
ben c'est la même chose écrit autrement c'est tout

ca reste le raisonnement que je t'ai donné au départ

VB:
 ' Get device context (DC) of the UserForm
    hDC = GetDC(0)

    ' Create compatible DC and bitmap
    hDCMem = CreateCompatibleDC(hDC)
    
    With WindowRECT
        .Left = .Left + LeftMarginPixels
        .Top = .Top + TopMarginPixels
        .Right = .Right - RightMarginPixels
        .Bottom = .Bottom - BottomMarginPixels
        
        hBitmap = CreateCompatibleBitmap(hDC, .Right - .Left, .Bottom - .Top)

        ' Select the bitmap into the memory DC
        hOld = SelectObject(hDCMem, hBitmap)
    
        ' Copy the UserForm's screen area into the memory DC
        BitBlt hDCMem, 0, 0, .Right - .Left, .Bottom - .Top, hDC, .Left, .Top, &HCC0020
    End With

    ' Open the clipboard, empty it, and set the new image into the clipboard
    OpenClipboard 0
    EmptyClipboard
    SetClipboardData 2, hBitmap  ' 2 = CF_BITMAP format

    ' Close the clipboard
    CloseClipboard
a part l'intérêt que tu porte au DWM avant que le remplace sans sourciller par le rect d'un screentoclient qui me donnera le même écart par rapport au rect , ca n'apporte pas grand chose a ma version originale(et puis perso l'ombre ne me gène pas )

par contre tu ne m'a rien dit sur la 2d version avec api(printWindow) qui malgré le thème win 10 shunté a son intérêt
dans le sens ou le userform peut être ou il veut même entre deux écrans(ce qui n'est pas possible avec la bitblt )
donc a méditer le thème est il important ou non telle est la question

on a bien bossé 👍 💪
 
Tu es parfaitement libre de faire un code avec <Alt> + ScreenPrint qui ne marchera pas chez moi à cause de FastStone FSCapture et chez tous ceux qui ont un outil de capture d'écran.
Salut,
Pour changer ou désactiver les raccourcis clavier comme Alt + Print Screen dans FastStone Capture (FSCapture), voici comment procéder :


Étapes pour modifier les raccourcis dans FastStone Capture :​


  1. Ouvrez FastStone Capture.
  2. Cliquez sur l’icône roue dentée (ou allez dans le menu Settings / Paramètres).
  3. Dans la fenêtre des paramètres, allez dans l’onglet Hotkeys (Raccourcis clavier).
  4. Vous verrez une liste des raccourcis actuels, dont celui pour Alt + Print Screen (Capture de la fenêtre active).
  5. Sélectionnez la ligne correspondant à Alt + Print Screen.
  6. Cliquez sur le bouton pour modifier le raccourci.
  7. Appuyez sur la nouvelle combinaison de touches que vous voulez utiliser à la place (par exemple Ctrl + Shift + F12 ou autre).
  8. Validez les changements.
Pour les autres logiciels de capture d'écran comme par exemple greenshot, il doit y avoir l'équivalent.
Et question bête : Pourquoi ne pas utiliser Word en VBA pour faire la mise en page et l'impression ? il y a plus de possibilités qu'Excel.

Nullosse
 
Dernière édition:
Bonjour à tous,
ben c'est la même chose écrit autrement c'est tout
Ah ben oui, pour arriver au résultat il y a forcément de nombreux points communs.
J'ai demandé un code à ChatGPT, code complètement faux sur les dimensions que j'ai corrigé et complété pour les marges, mais une base sans laquelle je n'aurais pas réussi à le faire.
il veut même entre deux écrans(ce qui n'est pas possible avec la bitblt )
T'es sûr de ça ? Parce que le BitBlt utilise des positions et dimensions pixels qui sont indépendantes du moniteur. Il y a continuité entre 2 moniteurs.
Pourquoi ne pas utiliser Word en VBA pour faire la mise en page et l'impression ?
C'est une idée ! A creuser si on veut des options d'impression plus riches.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
96
Réponses
1
Affichages
252
  • Question Question
XL 2019 User Form
Réponses
9
Affichages
357
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
409
Réponses
2
Affichages
343
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…