Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Une piste bien compliquée qui, utilisant les APIs, n'est valide que sous Windows.
ATTENTION : pour un fonctionnement sans problème il est IMPERATIF d'avoir des UserForms avec la propriété ShowModal = False.
Soit, en mode création, on fixe la propriété ShowModal à False.
Soit, dans le code d'appel du UserFom, on utilise la ligne de code UserForm1.Show (vbModeless)
MARCHE A SUIVRE
1) créez un UserForm1 (avec la propriété Width = 1500) et, dans sa partie gauche, un CommandButton1 (Caption = Fermer) et
un CommandButton2 (Caption = Impression UserForm).
2) créez un UserForm2 (avec la propriété Height = 1500) et, dans sa partie haute, un CommandButton1 (Caption = Fermer) et
un CommandButton2 (Caption = Impression UserForm).
3) dans leur fenêtre de code respective, copiez le code suivant
Code:
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
Dim x As New cls_ImprUSF
Call x.PrintOutUSF(Me)
End Sub
4) dans un module Standard copiez le code suivant
Code:
Sub USF_TresLarge()
UserForm1.Show (vbModeless)
End Sub
Sub USF_TresHaut()
UserForm2.Show (vbModeless)
End Sub
5) créez un module de classe, appuyez sur F4 pour faire apparaître la fenêtre de Propriétés et fixez (Name) = cls_ImprUSF
6) dans la fenêtre de code du module de classe cls_ImprUSF, copiez le code suivant
Code:
Private Declare Function ShowWindow& Lib "User32" ( _
ByVal hWnd As Long, ByVal nCmdShow As Long)
Private Declare Function FindWindow& Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String)
Private Declare Sub keybd_event Lib "User32" ( _
ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const SW_NORMAL As Long = &H1
Private Const SW_MINIMIZE As Long = &H6
Private Const KEYEVENTF_KEYUP = &H2
Private Sub ApercuImpression(USF As Object)
Dim S As Worksheet
On Error GoTo Erreur
Application.ScreenUpdating = False
Application.DisplayAlerts = False
DoEvents
keybd_event vbKeySnapshot, &H1, 0, 0
DoEvents
keybd_event vbKeySnapshot, 0, KEYEVENTF_KEYUP, 0
Set S = Sheets.Add
With S
.Paste Destination:=.[a1]
ShowWindow FindWindow(vbNullString, USF.Caption), SW_MINIMIZE
.PrintPreview
.[a1].Copy
ShowWindow FindWindow(vbNullString, USF.Caption), SW_NORMAL
.Delete
End With
Erreur:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Sub PrintOutUSF(USF As Object)
Dim EtatAppli As Long
Dim AppWidth As Single
Dim AppHeight As Single
Dim LargUF As Single
Dim HautUF As Single
Dim Coeff As Single
With Application
.ScreenUpdating = False
EtatAppli = .WindowState
.WindowState = xlMaximized
AppWidth = .Width
AppHeight = .Height
.WindowState = EtatAppli
End With
With USF
LargUF = .Width
HautUF = .Height
If LargUF < AppWidth And HautUF < AppHeight Then
Coeff = 1
Else
If LargUF > HautUF Then
Coeff = (AppWidth * 100) \ LargUF
.Zoom = Coeff
.Width = AppWidth - 5
.Height = .Height * (Coeff / 100)
Else
Coeff = (AppHeight * 100) \ HautUF
.Zoom = Coeff
.Height = AppHeight - 5
.Width = .Width * (Coeff / 100)
End If
End If
Call ApercuImpression(USF)
.Zoom = 100
.Width = LargUF
.Height = HautUF
End With
Application.ScreenUpdating = True
End Sub
Lancez la macro USF_TresLarge OU la macro USF_TresHaut pour faire des tests.
L'idée est de zoomer les UserForms pour qu'ils puissent s'inscrire dans l'écran puis de stocker leur image dans le
presse-papiers. On colle cette image dans une feuille temporaire Excel et on actionne la prévisualisation d'impression.
On peut, dans l'aperçu d'impression, faire différents réglages (les marges, l'orientation, etc) puis imprimer le document.
L'inconvénient de cette méthode est que, à la suite des différents zooms, l'image résultante apparaît floue.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.