En voila une question qu'elle est bonne !!!
Voila mon probl=E8me .
Dans mon appli, je suis amener =E0 imprimer une=20
Userform ... Jusque la pas de probl=E8me , j'utilise le=20
code suivant : Userform4.Printform et =E7a marche..
Mais ou est donc le probl=E8me alors me dira vous ?
Et bien mon Userform =E9tant assez large je voudrais=20
l'imprimer en format paysage et c'est la qu'est le=20
probl=E8me : comment affecter le format paysage a=20
l'impression d'un Userform ?
je pourrais configurer directement mon imprimante en=20
paysage , mon appli est utiliser sur notre r=E9seau par=20
plusieurs personnes donc il est impensable de configure=20
chaque imprimante une a une =E0 la main ..
Existe t'il un moyen en VBA de contr=F4ler l'imprimante=20
par d=E9faut et de modifie ses propri=E9t=E9s pour qu'elle=20
imprime en paysage ?
Je pensais utilise aussi la fonction=20
PageSetup.Orientation =3D xlLandscape mais marche pas non=20
plus.
Je pourrais =E9galement utiliser la propri=E9t=E9 zoom pour=20
r=E9tr=E9cir ma Userform , la aussi =E7a marche mais =E7a devient=20
illisible.
Merci a ceux qui se casseront la t=EAte pour me r=E9pondre.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Denis Michon
Bonjour Gus,
Voici 3 procédures parues ici et signées par Michel Perron sur le sujet :
================================ Avec la méthode PrintForm, tout est prédéfini et tu ne peux avoir aucune action sur les différents paramètres; l'objet Printer n'étant pas utilisable dans VBA. L'idée pour contourner le problème est la suivante: Utiliser les options d'impression d'Excel lui même en collant l'image de l'UserForm dans un nouveau classeur au travers du presse-papiers; malheureusement, la méthode SendKeys ne peut pas être utilisée pour effectuer cette opération car pour une raison qui m'échappe (peut être parceque Excel gère son propre presse-papiers), la touche Impression écran n'est pas gérée par SendKeys. Pour contourner ce problème, on va utiliser une fonction API. Je suppose que l'impression de ton UserForm est déclenchée par un bouton présent sur cet UserForm, auquel cas, je te propose d'associer la procédure suivante à ce bouton.
En tête du module de ton UserForm: 'La plus complète
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte _ , ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Declare Function EmptyClipboard Lib "user32" () As Long
' La procédure d'impression de l'UserForm: Private Sub PrintUserForm() Dim BookName As String
Application.CutCopyMode = False EmptyClipboard Me.Repaint '* Relâche le bouton avant l'impression keybd_event vbKeySnapshot, 0, 0&, 0& Application.ScreenUpdating = False Workbooks.Add BookName = ActiveWorkbook.Name ActiveWindow.Visible = False Workbooks(BookName).Sheets(1).Paste With Workbooks(BookName).Sheets(1).PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .CenterHorizontally = True .CenterVertically = True .Orientation = xlPortrait '* Vertical '.Orientation = xlLandscape '* Horizontal .PaperSize = xlPaperA4 .Zoom = 100 '* Mettre en remarque si impression ajustée ' * Ajuste l'impression (largeur & hauteur) '.Zoom = False '.FitToPagesWide = 1 '.FitToPagesTall = 1 End With Application.ScreenUpdating = True Windows(BookName).SelectedSheets.PrintOut Copies:=1 Workbooks(BookName).Close False End Sub
MP
Plus j'y pense et plus je crois qu'il est infiniment plus simple d'utiliser CopyPicture et d'ajuaster les dimensions de l'image a ce que tu souhaites, du genre:
Pour faire ce que tu veux, on ne peut jouer que sur le rapport de zoom dans les paramètres d'impression. Le ratio horizontal pouvant être différent du ratio vertical, le zoom sera ajusté à la moyenne des 2.
Sub ImpTailleConst() Dim Maplage As Range, HA4 As Long, LA4 As Long, Unity As Long Dim lRatio As Double, hRatio As Double
"Gus" a écrit dans le message de news:005701c3ad20$5c2a7170$ En voila une question qu'elle est bonne !!! Voila mon problème . Dans mon appli, je suis amener à imprimer une Userform ... Jusque la pas de problème , j'utilise le code suivant : Userform4.Printform et ça marche.. Mais ou est donc le problème alors me dira vous ? Et bien mon Userform étant assez large je voudrais l'imprimer en format paysage et c'est la qu'est le problème : comment affecter le format paysage a l'impression d'un Userform ? je pourrais configurer directement mon imprimante en paysage , mon appli est utiliser sur notre réseau par plusieurs personnes donc il est impensable de configure chaque imprimante une a une à la main .. Existe t'il un moyen en VBA de contrôler l'imprimante par défaut et de modifie ses propriétés pour qu'elle imprime en paysage ? Je pensais utilise aussi la fonction PageSetup.Orientation = xlLandscape mais marche pas non plus. Je pourrais également utiliser la propriété zoom pour rétrécir ma Userform , la aussi ça marche mais ça devient illisible.
Merci a ceux qui se casseront la tête pour me répondre.
Bonjour Gus,
Voici 3 procédures parues ici et signées par Michel Perron sur le sujet :
================================ Avec la méthode PrintForm, tout est prédéfini et tu ne peux avoir aucune
action sur les différents paramètres; l'objet Printer n'étant pas utilisable
dans VBA.
L'idée pour contourner le problème est la suivante:
Utiliser les options d'impression d'Excel lui même en collant l'image de
l'UserForm dans un nouveau classeur au travers du presse-papiers;
malheureusement, la méthode SendKeys ne peut pas être utilisée pour
effectuer cette opération car pour une raison qui m'échappe (peut être
parceque Excel gère son propre presse-papiers), la touche Impression écran
n'est pas gérée par SendKeys.
Pour contourner ce problème, on va utiliser une fonction API.
Je suppose que l'impression de ton UserForm est déclenchée par un bouton
présent sur cet UserForm, auquel cas, je te propose d'associer la procédure
suivante à ce bouton.
En tête du module de ton UserForm: 'La plus complète
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte _
, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function EmptyClipboard Lib "user32" () As Long
' La procédure d'impression de l'UserForm:
Private Sub PrintUserForm()
Dim BookName As String
Application.CutCopyMode = False
EmptyClipboard
Me.Repaint '* Relâche le bouton avant l'impression
keybd_event vbKeySnapshot, 0, 0&, 0&
Application.ScreenUpdating = False
Workbooks.Add
BookName = ActiveWorkbook.Name
ActiveWindow.Visible = False
Workbooks(BookName).Sheets(1).Paste
With Workbooks(BookName).Sheets(1).PageSetup
.RightFooter = Me.Caption & " Le &D Page &P/&N"
.PrintGridlines = False
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlPortrait '* Vertical
'.Orientation = xlLandscape '* Horizontal
.PaperSize = xlPaperA4
.Zoom = 100 '* Mettre en remarque si impression ajustée
' * Ajuste l'impression (largeur & hauteur)
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.ScreenUpdating = True
Windows(BookName).SelectedSheets.PrintOut Copies:=1
Workbooks(BookName).Close False
End Sub
MP
Plus j'y pense et plus je crois qu'il est infiniment plus simple d'utiliser
CopyPicture et d'ajuaster les dimensions de l'image a ce que tu souhaites,
du genre:
Pour faire ce que tu veux, on ne peut jouer que sur le rapport de zoom dans
les paramètres d'impression.
Le ratio horizontal pouvant être différent du ratio vertical, le zoom sera
ajusté à la moyenne des 2.
Sub ImpTailleConst()
Dim Maplage As Range, HA4 As Long, LA4 As Long, Unity As Long
Dim lRatio As Double, hRatio As Double
"Gus" <anonymous@discussions.microsoft.com> a écrit dans le message de news:005701c3ad20$5c2a7170$a101280a@phx.gbl...
En voila une question qu'elle est bonne !!!
Voila mon problème .
Dans mon appli, je suis amener à imprimer une
Userform ... Jusque la pas de problème , j'utilise le
code suivant : Userform4.Printform et ça marche..
Mais ou est donc le problème alors me dira vous ?
Et bien mon Userform étant assez large je voudrais
l'imprimer en format paysage et c'est la qu'est le
problème : comment affecter le format paysage a
l'impression d'un Userform ?
je pourrais configurer directement mon imprimante en
paysage , mon appli est utiliser sur notre réseau par
plusieurs personnes donc il est impensable de configure
chaque imprimante une a une à la main ..
Existe t'il un moyen en VBA de contrôler l'imprimante
par défaut et de modifie ses propriétés pour qu'elle
imprime en paysage ?
Je pensais utilise aussi la fonction
PageSetup.Orientation = xlLandscape mais marche pas non
plus.
Je pourrais également utiliser la propriété zoom pour
rétrécir ma Userform , la aussi ça marche mais ça devient
illisible.
Merci a ceux qui se casseront la tête pour me répondre.
Voici 3 procédures parues ici et signées par Michel Perron sur le sujet :
================================ Avec la méthode PrintForm, tout est prédéfini et tu ne peux avoir aucune action sur les différents paramètres; l'objet Printer n'étant pas utilisable dans VBA. L'idée pour contourner le problème est la suivante: Utiliser les options d'impression d'Excel lui même en collant l'image de l'UserForm dans un nouveau classeur au travers du presse-papiers; malheureusement, la méthode SendKeys ne peut pas être utilisée pour effectuer cette opération car pour une raison qui m'échappe (peut être parceque Excel gère son propre presse-papiers), la touche Impression écran n'est pas gérée par SendKeys. Pour contourner ce problème, on va utiliser une fonction API. Je suppose que l'impression de ton UserForm est déclenchée par un bouton présent sur cet UserForm, auquel cas, je te propose d'associer la procédure suivante à ce bouton.
En tête du module de ton UserForm: 'La plus complète
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte _ , ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Private Declare Function EmptyClipboard Lib "user32" () As Long
' La procédure d'impression de l'UserForm: Private Sub PrintUserForm() Dim BookName As String
Application.CutCopyMode = False EmptyClipboard Me.Repaint '* Relâche le bouton avant l'impression keybd_event vbKeySnapshot, 0, 0&, 0& Application.ScreenUpdating = False Workbooks.Add BookName = ActiveWorkbook.Name ActiveWindow.Visible = False Workbooks(BookName).Sheets(1).Paste With Workbooks(BookName).Sheets(1).PageSetup .RightFooter = Me.Caption & " Le &D Page &P/&N" .PrintGridlines = False .CenterHorizontally = True .CenterVertically = True .Orientation = xlPortrait '* Vertical '.Orientation = xlLandscape '* Horizontal .PaperSize = xlPaperA4 .Zoom = 100 '* Mettre en remarque si impression ajustée ' * Ajuste l'impression (largeur & hauteur) '.Zoom = False '.FitToPagesWide = 1 '.FitToPagesTall = 1 End With Application.ScreenUpdating = True Windows(BookName).SelectedSheets.PrintOut Copies:=1 Workbooks(BookName).Close False End Sub
MP
Plus j'y pense et plus je crois qu'il est infiniment plus simple d'utiliser CopyPicture et d'ajuaster les dimensions de l'image a ce que tu souhaites, du genre:
Pour faire ce que tu veux, on ne peut jouer que sur le rapport de zoom dans les paramètres d'impression. Le ratio horizontal pouvant être différent du ratio vertical, le zoom sera ajusté à la moyenne des 2.
Sub ImpTailleConst() Dim Maplage As Range, HA4 As Long, LA4 As Long, Unity As Long Dim lRatio As Double, hRatio As Double
"Gus" a écrit dans le message de news:005701c3ad20$5c2a7170$ En voila une question qu'elle est bonne !!! Voila mon problème . Dans mon appli, je suis amener à imprimer une Userform ... Jusque la pas de problème , j'utilise le code suivant : Userform4.Printform et ça marche.. Mais ou est donc le problème alors me dira vous ? Et bien mon Userform étant assez large je voudrais l'imprimer en format paysage et c'est la qu'est le problème : comment affecter le format paysage a l'impression d'un Userform ? je pourrais configurer directement mon imprimante en paysage , mon appli est utiliser sur notre réseau par plusieurs personnes donc il est impensable de configure chaque imprimante une a une à la main .. Existe t'il un moyen en VBA de contrôler l'imprimante par défaut et de modifie ses propriétés pour qu'elle imprime en paysage ? Je pensais utilise aussi la fonction PageSetup.Orientation = xlLandscape mais marche pas non plus. Je pourrais également utiliser la propriété zoom pour rétrécir ma Userform , la aussi ça marche mais ça devient illisible.
Merci a ceux qui se casseront la tête pour me répondre.