Comment connaître le pilote d'imprimante via VBA

Le
gege2000
Bonjour,
Nous avons différentes marques d'imprimante qui gérent différement le=
s
bacs Pour gérer la sélection du bon type de papier j'aimerais crée=
r
une macro qui me retourne le nom du pilote (pas le nom de l'imprimante
comme le fait "ActivePrinter") des imprimantes installées pour pouvoir
ensuite aller chercher les codes des bacs dans un fichier ini.
Mon problème est le suivant : Dans mes modèles j'aimerais pouvoir
gérer les codes des bacs (papier en-tête et papier blanc) des
différentes imprimantes de notre réseau. De plus, j'aimerais créer un=
e
macro qui affichera un masque permettant aux utilisateurs de
sélectionner une imprimante (liste de ses imprimantes installées) et
aussi le type de papier pour la première page et le type pour les
suivantes.
D'avance un grand merci à celles et ceux qui voudrons m'aider à
"pondre" ces deux bouts de code !!!! GeGe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Geo
Le #22622051
Bonjour à gege2000 qui nous a écrit :

Bonjour,
Nous avons différentes marques d'imprimante qui gérent différement les
bacs... Pour gérer la sélection du bon type de papier j'aimerais créer
une macro qui me retourne le nom du pilote (pas le nom de l'imprimante
comme le fait "ActivePrinter") des imprimantes installées pour pouvoir
ensuite aller chercher les codes des bacs dans un fichier ini.
Mon problème est le suivant : Dans mes modèles j'aimerais pouvoir
gérer les codes des bacs (papier en-tête et papier blanc) des
différentes imprimantes de notre réseau. De plus, j'aimerais créer une
macro qui affichera un masque permettant aux utilisateurs de
sélectionner une imprimante (liste de ses imprimantes installées) et
aussi le type de papier pour la première page et le type pour les
suivantes.
D'avance un grand merci à celles et ceux qui voudrons m'aider à
"pondre" ces deux bouts de code !!!! GeGe



La gestion des imprimantes et des bacs n'est pas une sinécure.
Voici quelques éléments que j'ai conservé :
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 ListeImprimantes()

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)
Debug.Print Impr(i), Application.ActivePrinter
ActivePrinter = NomImpr
Next i

End Sub

Sub ListeDesImprimantes()
Dim WshNetwork As Object
Dim Impr As Object
Dim Doc As Document
Dim i As Integer
Set Doc = Documents.Add

Set WshNetwork = CreateObject("WScript.Network")
Set Impr = WshNetwork.EnumPrinterConnections
For i = 1 To Impr.Count - 1 Step 2
Doc.Range.InsertAfter Impr.Item(i) & " on " & Impr.Item(i - 1) &
vbCrLf
Next
Doc.Range.ConvertToTable Separator:=wdSeparateByParagraphs
End Sub


J'ai d'autres archives, mais il se fait tard.

--
A+
gege2000
Le #22623601
Bonjour Geo,
Merci pour ces pistes. En effet c'était déjà tard et je te remercie
pour l'effort.
J'ai la liste des imprimantes dans une liste déroulante et les deux
champs pour sélectionner le type de papier. Maintenant j'aimerais le
driver de ces mêmes imprimantes ce qui me permettra d'aller lire le
fichier inin et sélectionner le bon bac. Et ça... j'y arrive pas
vraiment.
D'avance à toute autre aide. Bien à vous. GeGe
Geo
Le #22624501
Bonjour
J'ai la liste des imprimantes dans une liste déroulante et les deux
champs pour sélectionner le type de papier. Maintenant j'aimerais le
driver de ces mêmes imprimantes ce qui me permettra d'aller lire le
fichier ini et sélectionner le bon bac. Et ça... j'y arrive pas
vraiment.



Je ne sais pas trop ce que vous appelez le pilote, mais regardez si
vous trouvez votre bonheur avec la fonction
DeviceCapabilities
http://msdn.microsoft.com/en-us/library/dd183552(VS.85).aspx

--
A+
Geo
Le #22626931
Bonjour

Voici un bout de code qui permet de récupérer les caractéristiques
d'une imprimante :
http://cjoint.com/?jDoURaUVgu

C'est un peu ancien, il semble que la structure DevMode ait évolué
depuis, mais ça a l'air de marcher.
C'est extrait d'un module qui permettait de basculer une imprimante en
mode couleur ou noir et Blanc par défaut, et ça le faisait.

--
A+
gege2000
Le #22629361
Bonjour,
Merci Geo, ça me donne quelques idées sur les possibilités qui
s'offrent à moi....
Par pilote j'entendais le driver, avec ce nom je peux aller chercher
les paramètres dans le fichier ini. Je ne peux pas retrouver
l'imprimante avec son nom réseau dans le fichier ini. (plus de 300
imprimantes pour 6 modèles différents)
J'y arriverai... Merci encore.
Bonne journée. GeGe
Geo
Le #22629971
Bonjour
Plus court et plus "moderne" un code avec les wmi :
http://cjoint.com/?jEpNb4fASA

Il y a le driverpath qui indique quel est le fichier du pilote, mais je
ne sais pas si cela vous suffit pour l'identifier.

La macro liste toutes les données disponible dans le document Word
ouvert.
Un message indique combien de pilotes ont été trouvés et donc signale
la fin d'exécution.

--
A+
gege2000
Le #22633191
Bonjour Geo,
ça m'a l'air pas mal, je pense pouvoir utiliser le nom pour lire les
param. dans le fichier ini
Un tout grand merci, un beau et bon week-end. GeGe
Publicité
Poster une réponse
Anonyme