URGENT : changement d'imprimante depuis VB :°-(

I need your help ! - 3 juil. 2001 à 13:36
mbodjsystem Messages postés 26 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 9 juillet 2008 - 5 mai 2008 à 14:30
Bonjour à tous,

Voici ma question : comment changer l'imprimante par défaut depuis un programme VB ? :-)

En créant manuellement une imprimante "VirtualPrinter" sur LPT1: et contrôlant les changements à l'aide d'un Debug.Print tout semble bien se passer. Mais les traitements à effectuer (qui nécessitent l'utilisation d'une imprimante locale virtuelle) se passent non pas dans le programme, mais sous EXCEL (et apparemment les modifs effectuées sur l'objet Printer n'ont d'effet que dans le programme, mais pas sous Excel).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Dim p As Printer
Dim Cpt As Integer
Dim NumeroImprimanteDefaut As Integer
Dim NumeroVirtualPrinter As Integer
Dim Donnée As String
Dim Tempo As String

'on récupère le numéro de l'imprimante par défaut dans la variable NumeroImprimanteDefaut
Tempo = Printer.DeviceName
Cpt = 0
For Each p In Printers 'liste les imprimantes connues If p.DeviceName Tempo Then NumeroImprimanteDefaut Cpt
Cpt = Cpt + 1
Next

'le Debug.Print ci-dessous renvoie "defaut=\\LVE\Q_L1DEV"
Debug.Print ("defaut=" + Printer.DeviceName)

'on récupère le numéro de l'imprimante VirtualPrinter (imprimante fictive installée en LPT1:) dans la variable NumeroVirtualPrinter
Cpt = 0
For Each p In Printers 'liste les imprimantes connues If p.DeviceName "VirtualPrinter" Then NumeroVirtualPrinter Cpt
Cpt = Cpt + 1
Next

'déclare VirtualPrinter comme imprimante par défaut
Set Printer = Printers(NumeroVirtualPrinter)

'le Debug.Print ci-dessous renvoie "defaut=VirtualPrinter"
Debug.Print ("defaut=" + Printer.DeviceName)

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' TRAITEMENT DES OPERATIONS (OUVERTURE PUIS FERMETURE D'EXCEL)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'On remet l'imprimante d'origine
Set Printer = Printers(NumeroImprimanteDefaut)

'le Debug.Print ci-dessous renvoie "defaut=\\LVE\Q_L1DEV"
Debug.Print ("defaut=" + Printer.DeviceName)

'En théorie ça devrait marcher (le changement s'effectue bien, cf les Debug.Print), mais en contrôlant à chaque étape le panneau de configuration des imprimantes aucun changement réel ne s'effectue :°-(

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sous Windows 98 un code que j'avais mis au point marchait en modifiant la section "device=" dans le Win.ini mais cette section n'existe plus dans le Win.ini de Windows 2000 (c'est pour cela que je me suis tourné vers la solution de modifier l'objet Printer, mais cela ne marche que virtuellement).

Quant à modifier la base de registre, cela ne marchera probablement pas car il faudra sans doute rebooter pour que les changements prennent effet...

D'avance merci pour celui qui m'apportera la réponse (sur le forum ou par mail) et m'évitera ainsi l'achat d'une corde :-)

Cordialement,

Pascal

3 réponses

Hmm, Je crois qu'il faudrait l'écrire dans la base de registre.
Pas besoin de rebooter pour prendre effet car la collection des imprimantes du registre semble etre accéder a chaque fois qu'on y refère (sinon il faudrait rebooter lors de l'ajout d'une nouvelle imprimante ou le changement de l'imprimante par default)
0
I no longer need your help !
6 juil. 2001 à 13:54
Le problème a dû être traité différement suivant la version de l'OS (95/98 ou bien windows 2000).

On cherche tout d'abord la version de l'OS :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

TailleChemin = GetWindowsDirectory(Chaine, 128)

If Left(Chaine, TailleChemin) = "C:\WINDOWS" Then
'On est sous Windows 9x
endif

If Left(Chaine, TailleChemin) = "C:\WINNT" Then
'On est sous Windows NT ou 2000
End If

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sous Windows 95 & 98, le changement de l'imprimante par défaut s'effectue en modifiant la section "device=" du fichier win.ini

Sous Windows 2000, un "Application.ActivePrinter" permet de changer l'imprimante le temps des traitements sous Excel.

Merci à ceux qui ont pris le temps de me répondre, par mail notamment, et dont les différentes pistes données m'ont permis de mettre au point la solution à mon problème.

Et que vive encore longtemps la solidarité entre développeurs.

Cordialement,

Pascal
0
mbodjsystem Messages postés 26 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 9 juillet 2008
5 mai 2008 à 14:30
ooooh !!! regarde plutot ce code : http://www.vbfrance.com/code.aspx?id=28161

Adama MBODJI
www.mbodjsystem.com
0
Rejoignez-nous