Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/06/2009, 15h48   #1
Membre éprouvé
 
Inscription : juillet 2003
Messages : 354
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : juillet 2003
Messages : 354
Points : 416
Points : 416
Par défaut Modification automatique du bac d'imprimante

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
Trust est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 15h48   #2
Membre éprouvé
 
Inscription : juillet 2003
Messages : 354
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : juillet 2003
Messages : 354
Points : 416
Points : 416
Je continue de chercher (dés que j'ai un peu de temps ), et je me pose la question de savoir si ça ne serait pas dû au fait que je sois sous Excel 2002.

Peut être quelqu'un aurait un Excel plus récent pour tester ?

Je vais demander à mon employeur des nouveaux Excel
Trust est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web