De: Laurent longre Cc: drire.bourgogne Objet: Re: Récupération du nom de l'imprimante Date : jeudi 10 juin 1999 03:55 Merci pour cette question, excellente pour s'entraîner aux fonctions API! J'ai construit et testé la fonction suivante (pour Excel 97) uniquement sous Win95, mais elle devrait aussi marcher sous Win98 et probablement NT. Cette fonction "ListeImprimantes" renvoie un tableau variant contenant les noms des imprimantes installés. Exemple de test : dim Impr Impr = ListeImprimantes if Not IsEmpty(Impr) then [A1].resize(ubound(Impr)) _ = Worksheetfunction.transpose(Impr) ...copie les noms des imprimantes installés sur la feuille active. Si aucune imprimante n'est installé, ListeImprimantes renvoie un Variant vide (Empty). '======================================================== declare function EnumPrintersA Lib "Winspool.drv" _ (ByVal flags As long, ByVal name As String, ByVal Level As long, _ ByVal pPrinterEnum As String, ByVal cdBuf As long, _ pcbNeeded As long, pcReturned As long) As long declare function lstrcpyA Lib "Kernel32" _ (ByVal lpString1 As String, ByVal lpString2 As long) As long declare function lstrlen Lib "Kernel32" _ (ByVal lpString As long) As long function ListeImprimantes() dim Prts As String, Noms() As String dim LgBuff As long, ptrImp As long, NbImpr As long dim I As Integer, J As Integer EnumPrintersA &H2, 0, 5, Prts, 0, LgBuff, NbImpr Prts = Space(LgBuff) if EnumPrintersA(&H2, 0, 5, Prts, LgBuff, LgBuff, NbImpr) = 0 _ then Exit function redim Noms(1 to NbImpr) for I = 1 to NbImpr J = I * 20 - 19 ptrImp = Asc(Mid(Prts, J)) + Asc(Mid(Prts, J + 1)) * 256& _ + (Asc(Mid(Prts, J + 2)) + Asc(Mid(Prts, J + 3)) * 256) * 65536 Noms(I) = Space(lstrlen(ptrImp)) lstrcpyA Noms(I), ptrImp next I ListeImprimantes = Noms end function '======================================================== Cordialement, Laurent "drire.bourgogne" a écrit : > > Je cherche le nom de la variable (ou le tableau?) sous Excel 97 ou 5 > contenant le(s) nom(s) de(s) l'imprimante(s) sur un système donné. > En macro j'ai un truc du style > (application.ActivePrinter = "Epson 5200 sur LPT1") > qui peut varier selon le type d'imprimante. > > Mais où Excel a t-il été chercher ce "Epson 5200 sur LPT1" > Mystère... > > Cela me permettrait de paramétrer l'impression suivant l'imprimante > dans une macro... > si [Impression couleur] alors application.ActivePrinter = > Imprimante_couleur > si [Impression n&b] alors application.ActivePrinter = Imprimante_n&b > > Evidemment Imprimante_couleur et Imprimante_n&b seraient des variables > à initialiser en début de macro... Mais comment les initialiser ??? > > D'avance merci !