Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

problème pour lister les imprimantes dans une combobox

  • Initiateur de la discussion Initiateur de la discussion Oranger
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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é. 😡

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

A +
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
615
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…