OVH Cloud OVH Cloud

Imprimante

1 réponse
Avatar
patrice
Bonjour,

Est il possible de contr=F4ler l'existance d'une imprimante=20
avant d'imprimer via VBA ?

J'ai une appli qui imprimera selon les donn=E9es, sur=20
l'imprimante de l'utilisateur concern=E9 (r=E9seau). =E7a marche=20
super sauf si le nom de l'imprimante est mal renseign=E9,=20
Excel prend l'imprimante par d=E9gfaut, voir la derni=E8re=20
utilis=E9e...=20

Merci de votre aide

Patrice

1 réponse

Avatar
ChrisV
Bonjour Patrice,

A partir d'un post de Frédéric, et d'un code de LL...
(à recopier dans un module du classeur)

Private Declare Function EnumPrintersA Lib "Winspool.drv" _
(ByVal flags As Long, ByVal name As String, ByVal Level As Long, _
pPrinterEnum As Long, ByVal cdBuf As Long, _
pcbNeeded As Long, pcReturned As Long) As Long

Private Declare Function lstrlenA Lib "Kernel32" _
(ByVal lpString As Any) As Long

Private Declare Function lstrcpyA Lib "Kernel32" _
(ByVal lpString1 As String, ByVal lpString2 As Long) As Long

Sub Test()
MsgBox ExisteImpr("Printer PS")
End Sub

Function ExisteImpr(NomImprimante) As Boolean
Dim PrinterEnum() As Long, Impr() As String
Dim Needed As Long, Returned As Long, I As Integer
EnumPrintersA 2, vbNullString, 5, 0, 0, Needed, 0
ReDim PrinterEnum(Needed / 4)
EnumPrintersA 2, vbNullString, 5, PrinterEnum(0), _
Needed, Needed, Returned
ReDim Impr(1 To Returned)
For I = 1 To Returned
Impr(I) = Space$(lstrlenA(PrinterEnum(I * 5 - 5)))
lstrcpyA Impr(I), PrinterEnum(I * 5 - 5)
If Impr(I) = NomImprimante Then
ExisteImpr = True
Exit For
End If
Next I
End Function


ChrisV


"patrice" a écrit dans le message de
news: 55b701c523d1$52d3b3b0$
Bonjour,

Est il possible de contrôler l'existance d'une imprimante
avant d'imprimer via VBA ?

J'ai une appli qui imprimera selon les données, sur
l'imprimante de l'utilisateur concerné (réseau). ça marche
super sauf si le nom de l'imprimante est mal renseigné,
Excel prend l'imprimante par dégfaut, voir la dernière
utilisée...

Merci de votre aide

Patrice