Imprimer Userform en mode paysage

carlos

XLDnaute Impliqué
Supporter XLD
BONSOIR LE FORUM

J'ai recherché sur les archives de ce forum , une maniere d'imprimer un Userform en mode paysage.

J'ai trouvé : Application.Dialogs(xlDialogPrint).Show

Ca m'imprime la feuille excel en mode paysage mais le Userform en mode portrait .

Comment faire pour imprimer un Userform en mode Paysage ????

sI QUELQU'UN à UNE RéPONSE , JE LA TESTERAIS DE SUITE ;

mERCI
 

MichelXld

XLDnaute Barbatruc
bonjour

tu peux tester


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 Wrd As Object
Dim WrdDoc As Object

keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents

Set Wrd = CreateObject('Word.Application')
On Error Resume Next
Set WrdDoc = Wrd.Documents.Add
Wrd.Visible = False
WrdDoc.PageSetup.Orientation = wdOrientLandscape

Wrd.Selection.PasteSpecial
WrdDoc.PrintOut

WrdDoc.Close False
WrdDoc.Quit
End Sub



bonne journée
MichelXld
 

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour le forum
Re MichelXld
Je vois que tu es sur tous les fronts et j'ai de la chance car tu es 2 fois sur le mien ce matin .

Ta proposition comme d'habitude fonctionne à merveille , j'imprime bien mon Userform en entier .
Je vois que tu passes par un imprime ecran .

Cependant mon format de sortie est toujours en mode portrait , ce qui reduit l'affichage de mon USF.

comment obliger l'imprimante à sortir ce document en paysage ??


Merci
 

carlos

XLDnaute Impliqué
Supporter XLD
Bonne apres midi le forum
Bonne apres midi MichelXld

Je sais ,j'abuse mais travailler sur Word à partir d'excel , c'est pas ma tasse de thé

Bref je tente une derniere question sur ce sujet:

Comment redimenssionner mon image dans word pour qu'elle prenne toute la page en mode paysage.?

J'ai éssayé ca mais sans résultat :

WrdDoc.Shapes('Picture 2').Select
Selection.ShapeRange.ScaleWidth 1.31, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 1.31, msoFalse, msoScaleFromTopLeft
ActiveWindow.ActivePane.VerticalPercentScrolled = 50


Merci Carlos
 

Ti_

Nous a quitté
Repose en paix
Intéressant Michel, je connaissais kbd_event, mais je me demandais ce que donnerait ce vbkeySnapshot et j'aurais dit a priori qu'il copierait tout l'écran, ce qui n'aurait guère été intéressant. Je garderai cette astuce ;)

Mais comme Carlos, ça ne m'intéressait guère de passer par Word, aussi j'ai un peu simplifié ta macro en passant simplement par une feuille Excel (laquelle peut être masquée au demeurant).

Avantage, outre qu'on n'a plus à piloter word, c'est qu'on peut très facilement définir une fois pour toutes les propriétés de cette feuille (Orientation, définition des marges, centrer horizontalement/verticalement etc.)

Private Sub CommandButton2_Click()
keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents
Application.ScreenUpdating = False
With Feuil3 'le codename de la feuille masque
.Paste .Range('A1')
'si la feuille était masquée
.Visible = xlSheetVisible
.PrintOut
.Shapes(1).Delete
.Visible = xlSheetHidden
End With
Application.ScreenUpdating = True
End Sub

On peut aussi lancer un printpreview, mais alors il ne faut pas oublier de masquer d'abord le userform par un me.Hide, sinon on plante irrémédiablement Excel !
 

carlos

XLDnaute Impliqué
Supporter XLD
Salut Ti_
Re MichelXld

Il est tres chaud ton code Ti_ , j'ai du faire quelques efforts de reflexion pour retrouver mes feuilles cachées et mes shapes() mal numerotés ??

Bref tout mon chez moi est redevenu normal et je crois comprendre comment tu as fait .

Je test maintenant le preview afin de faire entrer tout cela sur une seule feuille .

Merci à tous les 2 pour ces informations tres tres utiles

Carlos
 

Ti_

Nous a quitté
Repose en paix
La macros suivante permet de voir l'image du formulaire en printpreview :

Private Sub CommandButton2_Click()
Dim Sh As Shape
keybd_event vbKeySnapshot, 1, 0&, 0&
DoEvents
Application.ScreenUpdating = False
With Feuil3
'par précaution, pour faire le ménage
For Each Sh In .Shapes
Sh.Delete
Next Sh
.Paste .Range('A1')
'si la feuille était masquée
.Visible = xlSheetVisible
'obligatoire avant un PrintPreview
Me.Hide
.PrintPreview
.Shapes(1).Delete
.Visible = xlSheetHidden
'userform à nouveau visile
Me.Show
End With
Application.ScreenUpdating = True
End Sub


Au passage, elle nettoie la feuille des images précédentes qui n'auraient pas été effacées.
En fait, à mon sens le printpreview n'est utile qu'une seule fois, pour définir les options d'impression de ta feuille, en particulier joue sur le zoom pour faire coincider au mieux ton userform aux dimensions de la page imprimée. Ensuite, une fois que c'est fait, tu n'auras plus à y retoucher, et tu pourras alors passer directement au PrintOut (sans avoir à masquer puis réafficher le userform, ce qui est plus simple).
 

MichelXld

XLDnaute Barbatruc
Re : Imprimer Userform en mode paysage

bonsoir

apparament , il y a eu un probleme de conversion de certains caractères lors de la migration vers le nouveau forum...

tu peux refaire un essai en remplaçant les apostrophes ' par des guillemets " dans ta procédure



bonne soiree
Ce lien n'existe plus
 

Compress

XLDnaute Occasionnel
Re : Imprimer Userform en mode paysage

Je me permets de mettre un autre code qui réalise l'impression du userform en format paysage que j'ai trouvé sur des forums américains, en effet le précédent code de Ti_ ne fonctionnait pas sur ma version. N'ayant pas trouver d'où venait le problème et n'ayant pas eu réellement le temps de le faire, je mets une version qui fonctionne et qui crée un classeur temporaire dans lequel la copie se basera, elle est aussi basé sur la méthode keybd_event.

Bonne journée le forum.

VB:
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)
Const VK_SNAPSHOT = 44
Const VK_LMENU = 164
Const KEYEVENTF_KEYUP = 2
Const KEYEVENTF_EXTENDEDKEY = 1

Private Sub CommandButton9_Click()
 
   DoEvents
 
   Application.ScreenUpdating = False
 
   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:01")
   ActiveSheet.PasteSpecial format:="Bitmap", Link:=False, _
   DisplayAsIcon:=False
   ActiveSheet.Range("A1").Select
   'forcé l'orientation en mode paysage
   ActiveSheet.PageSetup.Orientation = xlLandscape
 
   With ActiveSheet.PageSetup
      .PrintTitleRows = ""
      .PrintTitleColumns = ""
   End With
 
   ActiveSheet.PageSetup.PrintArea = ""
 
   With ActiveSheet.PageSetup
      .LeftHeader = ""
      .CenterHeader = ""
      .RightHeader = ""
      .LeftFooter = ""
      .CenterFooter = ""
      .RightFooter = ""
      .LeftMargin = Application.InchesToPoints(0.75)
      .RightMargin = Application.InchesToPoints(0.75)
      .TopMargin = Application.InchesToPoints(1)
      .BottomMargin = Application.InchesToPoints(1)
      .HeaderMargin = Application.InchesToPoints(0.5)
      .FooterMargin = Application.InchesToPoints(0.5)
      .PrintHeadings = False
      .PrintGridlines = False
      .PrintComments = xlPrintNoComments
 
      .CenterHorizontally = True
      .CenterVertically = True
      .Orientation = xlLandscape
      .Draft = False
      .PaperSize = xlPaperA4
      .FirstPageNumber = xlAutomatic
      .Order = xlDownThenOver
      .BlackAndWhite = False
      .Zoom = False
      .FitToPagesWide = 1
      .FitToPagesTall = 1
   End With
 
   ActiveWindow.SelectedSheets.PrintOut Copies:=1
   ActiveWorkbook.Close False
 
   Application.ScreenUpdating = True
 
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 178
Messages
2 085 982
Membres
103 079
dernier inscrit
sle