Une macro ouvrant la fenêtre " Imprimer "
Bonjour,
J’ai une petite question qui je suis sur ne vous posera pas de problèmes pour bien commencer la semaine.
Je souhaite imprimer un Userform à l'aide d'un bouton.
J'utilise le code suivant:
Private Sub CommandButton2_Click()
UserFormVerificacion2.PrintForm
End Sub
Mon problème, est qu'il me lance l'impression directement sur l'imprimante par défaut.
Je souhaiterai qu'il m'ouvre la fenêtre "imprimer" pour par exemple pouvoir sélectionner l'imprimante ou éventuellement imprimer un PDF.
Par ailleurs j’aimerai aussi pourvoir choisir d’ouvrir un aperçu avant impression avant d’imprimer.
Merci d'avance pour vos réponses.
Bruno.
Bonjour,
Apres mes recherche j'ai essayé cette solution:
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then UserFormVerificacion2.PrintFormCa m'ouvre bien la boite de dialogue pour selectioner l'imprimante, mais quand je choisis n'importe quelle imprimante ca n'effectue pas le changement et continue de l'envoyer sur l'imprimante par defaut initiale.
Auriez vous une alternative?
Cdt Bruno
Bonjour le Forum
J'ai un peu avancé.
Pour lancer l'impression, j'utilise une UserForm avec une ComboBox pour choisir l'imprimante.
J'utilise le code suivant:
Const HWND_BROADCAST = &HFFFF
Const WM_WININICHANGE = &H1A
Private Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Dim Chemin As String
Dim NC As Long
Dim Ret As String
Private Sub CommandButton1_Click()
Imprdef = ComboBox1
ProcédureImPrimanteParDéfaut (Imprdef)
Me.PrintForm
End Sub
Private Sub UserForm_Initialize()
'ComboBox1.RowSource = "listeImpr"
ComboBox1.AddItem "PDFCreator"
ComboBox1.AddItem "\\adrfp1\ADRPR_CTS3"
ComboBox1.AddItem "ADRPR_CTS3"
'ListBox1 = userformverficacion2.ListBox1
End Sub
Private Sub ProcédureImPrimanteParDéfaut(Imprdef)
'http://www.excelabo.net/trucs/imprimante_defaut
'HP LaserJet 3200 Series PS = Nom de l'imprimante apparaissant
' dans la fenêtre " imprimante" du panneau de configuration
'ChangeImprimanteParDéfaut ("HP LaserJet 3200 Series PS")
ChangeImprimanteParDéfaut (Imprdef)
End Sub
Sub ChangeImprimanteParDéfaut(nom As String)
'http://www.excelabo.net/trucs/imprimante_defaut
Chemin = String(260, 0)
Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
Ret = String(255, 0)
NC = GetPrivateProfileString("Devices", nom, "", Ret, 255, Chemin)
Ret = Left(Ret, NC)
WritePrivateProfileString "windows", "device", nom & "," & Ret, Chemin
SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, "windows"
End SubCette méthode foncionne mais avec reserve.
cela renvoie un autre problème.
Apres mon impression, et après avoir fermé l'UserForm imprimé, aucune de mes macros ne fonctionnent:
si je clique sur un bouton qui lance n'importe quelle Userform, un message d'erreur apparait (cf piece jointe).
Si je clique sur debug il me surligne: UserForm.Show
Je n'ai trouvé d'autre solution que de fermer mon fichier et de le rouvrir: Ce qui est un peu contraignant si je dois le faire après chaque impression.
As-tu une solution?
Cdt Bruno
J'ai trouvé une solution à ce probleme.
En utilisant le debug pas à pas (touche F8) je me suis rendu compte que le problème ne venait pas du lancement des Userforms mais de leur contenu.
En effet, j'ai simplement eu a rajouter des
.valueapres chaque
.additemqui existait dans mon code des Userforms.
Bruno.