problème pour lister les imprimantes dans une combobox

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.
 

Pièces jointes

  • Classeur exemple.xls
    47.5 KB · Affichages: 51
  • Classeur exemple.xls
    47.5 KB · Affichages: 63
  • Classeur exemple.xls
    47.5 KB · Affichages: 65
Dernière édition:

stefan373

XLDnaute Occasionnel
Re : problème pour lister les imprimantes dans une combobox

Bonsoir oranger et le forum,

Attention il y a un espace de trop après Imprimer dans la macro delete et cela n'efface pas le menu rajouté. :mad:

Pourriez-vous le retirer de votre fichier joint, pour éviter des problèmes aux membres.
Merci. :)

A +
 

Staple1600

XLDnaute Barbatruc
Re : problème pour lister les imprimantes dans une combobox

Bonsoir

Voici un autre code (plus à mon goût ;) ) pour lister les imprimantes
VB:
Sub a()
'Liste les imprimantes avec WMI
Dim strComputer, strResults
Dim objWMIService, colPrinters, objPrinter, strPrinterType
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")
For Each objPrinter In colPrinters
strPrinterType = IIf(objPrinter.Attributes And 16, "Réseau", "Local")
strResults = strResults & objPrinter.Name & "| " & strPrinterType & IIf(objPrinter.Default, "| Par défaut", vbNullString) & vbCrLf
Next
MsgBox strResults
End Sub

Vois comment tu peux t'en servir pour ton problème.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass