|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Membre éclairé
![]() Date d'inscription: juillet 2003
Localisation: Lille
Âge: 27
Messages: 359
|
Bonjour à tous !
Voilà quelques temps que j'essaye d'automatiser quelque chose de tout simple sous VBA Word, mais apparemment de nettement plus compliqué sous VBA Excel. Je veux bien sur parler du changement de bac d'alimentation d'une imprimante. Voilà l'idée générale de ce que je souhaite faire : 1/ Une attestaion est générée automatiquement 2/ L'utilisateur choisi d'imprimer ou d'exporter en PDF 3/ Si il choisit d'imprimer, l'impression doit se faire sur le bac 2 (papier avec en-tête) et sur le bac 3 (papier blanc). La "double" impression doit être faite sans intervention de l'utilisateur (en somme, il clique sur imprimer et ça lui sort automatiquement les deux feuilles : 1 avec en-tête et l'autre sur papier blanc Les étapes 1/ et 2/ ne posent pas de problème mais c'est à l'étape 3/ que je bloque. Après moultes recherches sur DVP et sur gougle, j'ai récupéré un code VB, adapté en VBA, qui me permet de modifier les paramètres de l'imprimante automatiquement en utilisant l'API Windows. Après vérification, selon que je lui demande le bac 2 ou le bac 3, il effectue bien les modifications dans les options de l'imprimante, mais néanmoins en imprimant "réellement", l'impression se fait toujours sur bac 3... . J'ai tenté de sélectionner une autre imprimante et ensuite de resélectionner l'imprimante voulue afin de recharger les paramètres de l'imprimante mais ça n'a rien donné. J'ai tenté également une solution alternative donnée sur DVP, consistant à créer une imprimante avec le Bac 2 par défaut, et une autre avec le bac 3 par défaut, et de jongler avec les deux imprimantes. Là encore, je bloque sur le même problème : il fait bien la modification des imprimantes mais ne prend pas en compte le paramètre par défaut. Le seul moyen pour faire changer le paramètre de bac est d'aller manuellement dans les options et de changer de bac ... . Pour le moment, j'utilise une solution alternative avec des SendKeys mais, avouons-le, c'est très moche de faire ça ! ![]() Quelqu'un aurait-il déjà rencontré ce problème, ou aurait trouvé une solution au changement de bac ? Ci-dessous les procédures pour imprimer soit en utilisant l'API Windows, soit avec la double imprimante. Je ne mets pas le code des fonctions utilisant l'API Windows car il est un peu long. Si vous souhaitez tout de même voir ce code n'hésitez pas à me le demander (si ça peut aider ou si vous êtes curieux ^^). Merci bien ! --- Sub avec API Windows --- Code :
Public Sub SetINFO_DVP() '*** Utilise les fonctions GetPrinterProperty et SetPrinterProperty via l'API Windows *** Dim CurrentDefaultPrinter As String 'Imprimante par défaut avant macro Dim CurrentDefaultSource As Long 'Bac par défaut avant macro Dim DefaultSourceSwitch As Boolean 'Après test de la fonction GetPrinterProperty 'Choix du Bac = DM_DEFAULTSOURCE 'BAC 1 = 262 'BAC 2 = 261 'BAC 3 = 260 With Application .ScreenUpdating = False 'Imprimante et bac par défaut CurrentDefaultSource = GetPrinterProperty(DM_DEFAULTSOURCE) CurrentDefaultPrinter = .ActivePrinter 'Sélection de l'imprimante .ActivePrinter = "HP LaserJet 4350 PCL 6 sur Ne02:" 'Modification du bac (bac2) DefaultSourceSwitch = SetPrinterProperty(DM_DEFAULTSOURCE, 261) 'Déselectionne et resélectionne l'imprimante .ActivePrinter = "PDFCreator sur Ne01:" .ActivePrinter = "HP LaserJet 4350 PCL 6_Bac2 sur Ne02:" 'Impression '.ThisWorkbook.SelectedSheets.PrintOut 'Gâcher du papier caymal x) 'Modification du bac (bac3) DefaultSourceSwitch = SetPrinterProperty(DM_DEFAULTSOURCE, 260) 'Déselectionne et resélectionne l'imprimante .ActivePrinter = "PDFCreator sur Ne01:" .ActivePrinter = "HP LaserJet 4350 PCL 6 sur Ne02:" 'Impression '.ThisWorkbook.SelectedSheets.PrintOut 'Gâcher du papier caymal x) 'On remet les paramètres par défaut DefaultSourceSwitch = SetPrinterProperty(DM_DEFAULTSOURCE, CurrentDefaultSource) .ActivePrinter = CurrentDefaultPrinter .ScreenUpdating = True End With End Sub --- Sub avec Double Imprimante --- Code :
Public Sub SetINFO_DVP_2() ' *** Deux imprimantes créées sous Windows, avec chacune un bac paramétré *** Dim CurrentDefaultPrinter As String 'Imprimante par défaut avant macro With Application .ScreenUpdating = False 'Imprimante par défaut CurrentDefaultPrinter = .ActivePrinter 'Déselectionne et resélectionne l'imprimante (bac 2) .ActivePrinter = "PDFCreator sur Ne01:" MsgBox "ActivePrinter : " & .ActivePrinter .ActivePrinter = "HP LaserJet 4350 PCL 6_Bac2 sur Ne03:" MsgBox "ActivePrinter : " & .ActivePrinter '.ThisWorkbook.SelectedSheets.PrintOut 'Gâcher du papier caymal x) 'Sélectionne l'imprimante (bac 3) .ActivePrinter = "HP LaserJet 4350 PCL 6_Bac3 sur Ne02:" MsgBox "ActivePrinter Is " & .ActivePrinter '.ThisWorkbook.SelectedSheets.PrintOut 'Gâcher du papier caymal x) 'On remet l'imprimante par défaut .ActivePrinter = CurrentDefaultPrinter MsgBox "ActivePrinter Is " & Application.ActivePrinter .ScreenUpdating = True End With End Sub |
|
|
|
|
|
#2 (permalink) |
|
Membre éclairé
![]() Date d'inscription: juillet 2003
Localisation: Lille
Âge: 27
Messages: 359
|
Je continue de chercher (dés que j'ai un peu de temps
Peut être quelqu'un aurait un Excel plus récent pour tester ? Je vais demander à mon employeur des nouveaux Excel
|
|
|
|
|
|
![]() |
||
[XL-2002] Modification automatique du bac d'imprimante
|
||
| Outils de la discussion | |
|
|