Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment connaître le pilote d'imprimante via VBA

7 réponses
Avatar
gege2000
Bonjour,
Nous avons diff=E9rentes marques d'imprimante qui g=E9rent diff=E9rement le=
s
bacs... Pour g=E9rer la s=E9lection du bon type de papier j'aimerais cr=E9e=
r
une macro qui me retourne le nom du pilote (pas le nom de l'imprimante
comme le fait "ActivePrinter") des imprimantes install=E9es pour pouvoir
ensuite aller chercher les codes des bacs dans un fichier ini.
Mon probl=E8me est le suivant : Dans mes mod=E8les j'aimerais pouvoir
g=E9rer les codes des bacs (papier en-t=EAte et papier blanc) des
diff=E9rentes imprimantes de notre r=E9seau. De plus, j'aimerais cr=E9er un=
e
macro qui affichera un masque permettant aux utilisateurs de
s=E9lectionner une imprimante (liste de ses imprimantes install=E9es) et
aussi le type de papier pour la premi=E8re page et le type pour les
suivantes.
D'avance un grand merci =E0 celles et ceux qui voudrons m'aider =E0
"pondre" ces deux bouts de code !!!! GeGe

7 réponses

Avatar
Geo
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+
Avatar
gege2000
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
Avatar
Geo
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+
Avatar
Geo
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+
Avatar
gege2000
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
Avatar
Geo
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+
Avatar
gege2000
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