Impression d'un UserForm

avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 21 janv. 2007 à 17:29
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 21 janv. 2007 à 18:39
Bonjour à tous,

Je veux imprimer mon userform en 3 copies pour facturation.

Je rencontre un probleme sur se code:
<hr size= "2" width="100%" />
Private Sub CommandButton1_Click()
msg = "Voulez-vous continuer l'impression ?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then

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.PageSetup.Orientation = xlLandscape
    Ws.Paste
   
    'impression centrée dans la page
    With Ws
        .PageSetup.CenterHorizontally = True
        .PageSetup.CenterVertically = True
        'test1
        ActiveWindow.SmallScroll Down:=18
    Selection.ShapeRange.ScaleWidth 0.87, msoFalse, msoScaleFromTopLeft
    Selection.ShapeRange.ScaleHeight 0.87, msoFalse, msoScaleFromTopLeft
    ActiveWindow.SmallScroll Down:=-21
   
   
    msg = "Voulez-vous continuer l'impression pour la copie comptabilité?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
   
   
   
    'Copie comptabilité
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = "&""Arial,Gras""Copie comptabilité"
        .LeftMargin = Application.InchesToPoints(0.78740157480315)
        .RightMargin = Application.InchesToPoints(0.78740157480315)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        '.PrintQuality = 1200
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    .PrintOut
    End If
   
    msg = "Voulez-vous continuer l'impression pour votre copie dossier?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
   
    'Copie dossier
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = "&""Arial,Gras""Copie dossier"
        .LeftMargin = Application.InchesToPoints(0.78740157480315)
        .RightMargin = Application.InchesToPoints(0.78740157480315)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        '.PrintQuality = 1200
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    .PrintOut
    End If
      
       msg = "Voulez-vous continuer l'impression pour la copie fournisseur?"
Style = vbYesNo + vbDefaultButton1
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then
    'Copie fournisseur
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = ""
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = "&""Arial,Gras""Copie fournisseur"
        .LeftMargin = Application.InchesToPoints(0.78740157480315)
        .RightMargin = Application.InchesToPoints(0.78740157480315)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        '.PrintQuality = 1200
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    .PrintOut
    End If
    Application.DisplayAlerts = False
       ActiveWindow.SelectedSheets.Delete
       Application.DisplayAlerts = True
    
    End With
End If
End Sub
<hr size="2" width="100%" />Avez-vous une idée pourquoi il arret sur  keybd_event ?
Pourtant dans un autre document, il fonctionne très bien

12 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 janv. 2007 à 17:38
il faut que la fonction API keybd_event soit accessible à ta feuille, sinon c'est sûr qu'il pourra pas la trouver tout seul !
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
21 janv. 2007 à 17:39
javais oublié de mettre se code:
<hr size="2" width="100%" />
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
<hr size="2" width="100%" />Parcontre, l'impression ne s'affiche pas tout au complet, seulement une partie du userform. Comment faire pour que le userform complet s'imprime?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 17:42
la fonction keybd_event est une fonction de la librairie user32.dll de l'API de Windpws...

On n'en voit pas la déclaration dans ton code.
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
21 janv. 2007 à 17:47
L'impression ce fait maintenant, le problème que je rencontre en ce moment, c'est que lorsque le userform s'imprime, ayant dans le userform une barre de défillement, il imprime que la partie affiché et non la totalité du userform.

Le code complet que j'ai écrit plus haut, je n'arrive pas à figurer ou je doit modifier pour imprimer la totalité.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 18:06
Bien évidemment, puisque tu fais une capture de ce qui est visible...


Le plus simple est encore pour toi que tu en fasses 2...
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
21 janv. 2007 à 18:09
quel serait la meilleur facon de faire, je ne vois pas par ou commencer?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 janv. 2007 à 18:11
Et moi je pense que le plus simple est d'avoir une ou des feuilles déjà ajustées côté pagination et d'y copier les détails et les imprimer...

Mais bon, c'est ma façon de voir la chose...

MPi
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 18:14
Ouais, les gars...
Relisons donc son 1er message :

"Je veux imprimer mon userform en 3 copies pour facturation."

Drôle de façon que de faire une facture en imprimant une copie d'écran !
Qui va le lui dire ?
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
21 janv. 2007 à 18:21
Disons à la place un formulaire que je veux imprimer.

J'ai crée un formulaire avec un userform et je dois faire la mise en page pour impression.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 18:23
Personne ?
Bon alors moi (je ne connais rien à VBA mais ça n'a pas d'importance) :

Ce que tu as sur ton userform sont des contrôles qui ont des propriétés (dont la propriété Text pour le textboxes, etc...)

Ce n'est pas en faisant une copie d'écran que l'on établit une facture mais en se servant de ces éléments pour la définir et l'imprimer (énorme gain de temps et d'encre)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 18:35
Et si tu es sous Excel, rien ne t'interdit, en plus, d'envoyer ces données vers des cellules préformatées d'une feuille réservée à celà, puis d'imprimer cette feuille !
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
21 janv. 2007 à 18:39
Tu as tout à fais raison, je viens de pensser à une autre solution grace à toi.

Je reviens pour donner des nouvelles après un petit test.

Merci [auteurdetail.aspx?ID=615490 jmfmarques]      
0
Rejoignez-nous