OVH Cloud OVH Cloud

VBA - définir un port imprimante

14 réponses
Avatar
ThierryP
Bonsoir tout le monde !

Petit souci avec un changement d'imprimante :

J'ai un copieur/imprimante en r=C3=A9seau qui fait N&B (d=C3=A9faut) et cou=
leur (sur demande). Je sais changer d'imprimante mais ce copieur me pose un=
probl=C3=A8me.
Il me semble que le souci vient du fait que les adresses ip sont :
10.172.191.215 pour le N&B et 10.172.191.215_1 pour la couleur.

Donc, peut-on d=C3=A9finir l'adresse IP de l'imprimante choisie ? Je n'arri=
ve pas =C3=A0 trouver une syntaxe correcte (si elle existe !)

Merci d'avance,

ThierryP

4 réponses

1 2
Avatar
MichD
Si tu veux appeler l'impression en utilisant l'événement "Workbook_BeforePrint"
j'ai ajouté quelques lignes de code, dont celle-ci : Cancel = True '<<< ajouter
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'-----------------------------------------------------------
Dim ImprimanteDésirée As String, ImprimanteActuel As String
Dim SonNom As String
'Le nom de l'imprimante avec lequel tu veux imprimer
SonNom = "VMSERVTS01Copieur_Couleur sur Ne0"
ImprimanteDésirée = Mon_Imprimante(SonNom)
'Prend en note l'imprimante par défaut actuel
ImprimanteActuel = Application.ActivePrinter
'Modifie l'imprimante pour celle que tu désires.
ChangeImprimanteParDéfaut ImprimanteDésirée
Application.EnableEvents = False '<<< ajouter
'Exécute l 'impression
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Cancel = True '<<< ajouter
Application.EnableEvents = True '<<< ajouter
'Remet l'imprimante par défaut comme avant.
ChangeImprimanteParDéfaut ImprimanteActuel
End Sub
'-----------------------------------------------------------
Sub ChangeImprimanteParDéfaut(Imprimante)
Dim WshNetwork, oPrinters, I, DefPrinter
DefPrinter = Application.ActivePrinter
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For I = 0 To oPrinters.Count - 1 Step 2
If InStr(1, Imprimante, oPrinters.Item(I + 1), vbTextCompare) = 1 Then
WshNetwork.SetDefaultPrinter oPrinters.Item(I + 1)
Exit Sub
End If
Next
End Sub
'-----------------------------------------------------------
Function Mon_Imprimante(SonNom As String)
Dim A As Integer, Temp As String
Dim objDictionary As Object, strComputer As String
Dim objWMIService As Object, colPrinters As Object
Dim objprinter As Object
Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objprinter In colPrinters
Temp = objprinter.Name & " sur " & objprinter.PortName
If InStr(1, Temp, SonNom, vbTextCompare) > 0 Then
Mon_Imprimante = Temp
Exit For
End If
Next
End Function
'-----------------------------------------------------------
MichD
Avatar
ThierryP
Bonjour JièL,
J'ai bien deux imprimantes différentes. Physiquement, c'est la mê me avec juste l'option couleur activée pour l'une.
D'après mes tests, quand je prend deux imprimantes physiquement diff érentes, tout marche nickel, le souci vient uniquement de cette #@!?%# @ imprimante avec deux paramétrages.
Mais je vais néanmoins tester ta proposition !
Merci
ThierryP
Avatar
ThierryP
Bonjour Denis,
J'avais déjà ajouté ces lignes, mais ça ne change rien.
Je vais tenter un mix de ta proposition et de celle de JièL, mais je p ense que le problème ne vient pas d'Excel, au vu de mes tests. De plus , je me sers depuis longtemps de ce type de proc pour imprimer soit en pdf soit physiquement ans aucun problème.
Mais au moins j'apprends quelque chose de nouveau grâce à tes pro positions ;o))
ThierryP
Avatar
ThierryP
En appliquant la proposition de JièL avec le code de Denis, tout fonct ionne nickel !
'-----------------------------------------------------------------
Private Sub Worksheet_Activate()
Dim ImprimanteDésirée As String, ImprimanteActuel As String
'---------- Changement Imprimante ---------------
SonNom = "VMSERVTS01Copieur_Couleur"
ImprimanteDésirée = Mon_Imprimante(SonNom)
ChangeImprimanteParDéfaut ImprimanteDésirée
End Sub
Private Sub Worksheet_Deactivate()
'---------- Changement Imprimante ---------------
Dim ImprimanteDésirée As String, ImprimanteActuel As String
SonNom = "VMSERVTS01Copieur_Noir"
ImprimanteDésirée = Mon_Imprimante(SonNom)
ChangeImprimanteParDéfaut ImprimanteDésirée
End Sub
'-----------------------------------------------------------------
Merci aux deux gourous !!
ThierryP
1 2