Impression userform code API

Bonjour,

Je travaille actuellement sur un petit logiciel muni de plusieurs Userform. Certain Userform possède un bouton permettant de l'imprimer et de choisir l'imprimante que l'on souhaite. Cela permet principalement d'imprimer en PDF avec PDFCreator ou directement sur feuille.

J'ai trouvé un code parmi différents forums qui permet de réaliser cette fonction :

Dans un module :

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

Public StrImprimante As String

Sub ChangeImprimanteParDéfaut(Nom As String)
 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 Sub

Function ImprimanteParDéfaut() As String
 Chemin = String(260, 0)
 Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
 Ret = String(255, 0)
 NC = GetPrivateProfileString("windows", "device", "", Ret, 255, Chemin)
 Ret = Left(Ret, NC)
 NC = InStr(Ret, ",")
 ImprimanteParDéfaut = Left(Ret, NC - 1)
End Function

Et au niveau du bouton impression :

Private Sub CommandImprimer_Click()

StrImprimante = ImprimanteParDéfaut
Application.Dialogs(xlDialogPrinterSetup).Show
ChangeImprimanteParDéfaut Application.ActivePrinter
Userform1.PrintForm
ChangeImprimanteParDéfaut StrImprimante

End Sub

Ce code à fonctionné une fois parfaitement mais maintenant lorsque je clique sur mon bouton imprimer, j'ai bien la fenêtre de choix d'imprimante qui s'ouvre mais lorsque je valide j'ai une erreur qui apparaît :

Erreur d'exécution 484

Problème pour obtenir des informations du gestionnaire d'imprimante du système. Assurez-vous que le gestionnaire d'imprimante est installé correctement.

J'ai fais quelques recherches sur cette erreur sans trouver de solutions convaincantes.

D'autant plus que dans mon éditeur VBA, lorsque je fais Fichier / Imprimer, une fenêtre d'erreur s'affiche avec exactement la même indication que pour mon userform

Si quelqu'un peut m'éclaircir sur cette erreur et à une solution pour y remédier !!

Je vous remercie d'avance

Bonjour,

J'ai testé ton code et il fonctionne correctement sur ma machine.

Sur le Net, j'ai trouvé ceci : https://support.microsoft.com/fr-ca/kb/2992332

Probablement que tu as déjà lu cette page.

Bonne recherche

Gelinotte

Rechercher des sujets similaires à "impression userform code api"