Oranger
XLDnaute Occasionnel
Bonjour,
Mon but est d'imprimer toutes les pages d'un classeur en 1 fois, mais je souhaiterais aussi pourvoir choisir l'imprimante sur laquelle imprimer ainsi que la couleur. J'ai fais une recherche sur internet et j'ai trouvé un code que j'ai adapté à mon projet sur le site: Choix imprimante en VB - VB/VBA/VBS - Programmation - FORUM HardWare.fr
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
Private Sub UserForm_Initialize()
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)
Next I
ComboBox1.List = Impr
End Sub
Cependant le code ne me ramène pas toutes les imprimantes. J'ai l'impression que c'est à cause des anti-slash. Le nom des imprimantes qui n'apparaissent pas sont de la forme suivante par exemple:
\\abcsps01\abcP0221 bureau.
je ne comprend pas entièrement ce code. Quelqu'un pourrait il m'expliquer celui-ci, et comment faire pour lister les imprimantes même celles avec des anti-slash.
Je joins un exemple de mon projet.
Merci d'avance à tous ceux qui prendront du temps pour m'aider.
Mon but est d'imprimer toutes les pages d'un classeur en 1 fois, mais je souhaiterais aussi pourvoir choisir l'imprimante sur laquelle imprimer ainsi que la couleur. J'ai fais une recherche sur internet et j'ai trouvé un code que j'ai adapté à mon projet sur le site: Choix imprimante en VB - VB/VBA/VBS - Programmation - FORUM HardWare.fr
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
Private Sub UserForm_Initialize()
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)
Next I
ComboBox1.List = Impr
End Sub
Cependant le code ne me ramène pas toutes les imprimantes. J'ai l'impression que c'est à cause des anti-slash. Le nom des imprimantes qui n'apparaissent pas sont de la forme suivante par exemple:
\\abcsps01\abcP0221 bureau.
je ne comprend pas entièrement ce code. Quelqu'un pourrait il m'expliquer celui-ci, et comment faire pour lister les imprimantes même celles avec des anti-slash.
Je joins un exemple de mon projet.
Merci d'avance à tous ceux qui prendront du temps pour m'aider.
Pièces jointes
Dernière édition: