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

10 réponses

1 2
Avatar
isabelle
bonjour Thierry,
tu peut installé la mème imprimante plusieurs fois au panneau de configuration
avec des nom différent et chacun avec des choix d'impression différent
par exemple mon imprimante epson
epson en paysage
epson Noir_Blanc
etc...
de cette façon plus besoin de connaitre son IP, seulement son nom
isabelle
Le 2016-12-14 à 11:57, ThierryP a écrit :
Bonsoir tout le monde !
Petit souci avec un changement d'imprimante :
J'ai un copieur/imprimante en réseau qui fait N&B (défaut) et couleur (sur demande). Je sais changer d'imprimante mais ce copieur me pose un problème.
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éfinir l'adresse IP de l'imprimante choisie ? Je n'arrive pas à trouver une syntaxe correcte (si elle existe !)
Merci d'avance,
ThierryP
Avatar
ThierryP
Bonsoir Isabelle,
Merci pour le retour, mais c'est bien la configuration que l'on a déj à !
Si je change d'imprimante pour une physiquement différente, pas de pro blème... Mon souci (apparemment) vient du fait que c'est la même avec une config différente, mais avec des adresses IP quasi identiques (voir ci-dessous). Suite à mon dernier test, ma macro fonctionne si j e la lance en direct, mais pas si je l'appelle depuis le workbook_beforepri nt :
'------------------------------------------------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Edition" Or ActiveSheet.Name = "Edition_Suite" T hen Call Impression_Page
Cancel = True
End Sub
'------------------------------------------------------
'------------------------------------------------------
Sub Impression_Page()
Dim A As String
Application.ScreenUpdating = False
A = Application.ActivePrinter
'----------------------------------------------------
'Modifier l'imprimante par défaut pour Couleur
For port = 0 To 9
Color_Printer = "VMSERVTS01Copieur_Couleur sur Ne0" & port & ":"
'Color_Printer = "VMSERVTS01LaserJet_BE sur Ne0" & Port & ":"
On Error Resume Next
ActivePrinter = Color_Printer
If ActivePrinter = Color_Printer Then Exit For
Next
Application.EnableEvents = False
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Application.ActivePrinter = A
Application.EnableEvents = True
End Sub
'----------------------------------------------------
J'ai un peu de mal à comprendre !!
ThierryP
Le mercredi 14 décembre 2016 19:01:02 UTC+1, isabelle a écrit  :
bonjour Thierry,
tu peut installé la mème imprimante plusieurs fois au panneau d e configuration
avec des nom différent et chacun avec des choix d'impression diffà ©rent
par exemple mon imprimante epson
epson en paysage
epson Noir_Blanc
etc...
de cette façon plus besoin de connaitre son IP, seulement son nom
isabelle
Le 2016-12-14 à 11:57, ThierryP a écrit :
Bonsoir tout le monde !
Petit souci avec un changement d'imprimante :
J'ai un copieur/imprimante en réseau qui fait N&B (défaut) et couleur (sur demande). Je sais changer d'imprimante mais ce copieur me pos e un problème.
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éfinir l'adresse IP de l'imprimante choisie ? Je n' arrive pas à trouver une syntaxe correcte (si elle existe !)
Merci d'avance,
ThierryP
Avatar
MichD
Bonjour,
Est-ce que ceci ferait l'affaire ?
=========================================================== '---------------------------------------
Sub test()
'Nom de l'imprimante tel qu'écrit dans le panneau
'de configuration de Windows
Dim strComputer As String, objWMIService As Object
Dim colInstalledPrinters As Object, objPrinter As Object
Dim X As Variant, Arr()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objPrinter In colInstalledPrinters
a = a + 1
Message = Message & a & " - Nom: " & objPrinter.Name & vbCrLf
ReDim Preserve Arr(1 To a)
Arr(a) = objPrinter.Name
Next
X = Application.InputBox(Prompt:= _
"Insérer le chiffre correspondant à l'imprimante désirée." & _
vbCrLf & Message, Title:="Choisissez une imprimante", Type:=1)
If X = False Then Exit Sub
Call Imprimante_Par_Défaut(Arr(X))
End Sub
'-----------------------------------------
Sub Imprimante_Par_Défaut(Nom_Imprimante As Variant)
Dim strComputer As String, objWMIService As Object
Dim colInstalledPrinters As Object, objPrinter As Object
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!" & strComputer & "rootcimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = '" & Nom_Imprimante & "'")
For Each objPrinter In colInstalledPrinters
objPrinter.SetDefaultPrinter
Next
End Sub
'-----------------------------------------
===========================================================
Tu as aussi ceci, elle est de Michel Perron :
'======================= Sub SetMonImprimante()
Dim MonImpr, S, Serveur
Dim Fait As Boolean, wsN
MonImpr = "Brother HL-5340D"
Serveur = "Serveur01" 'ou autre
Set wsN = CreateObject("WScript.Network")
'recherche l'imprimante à utiliser
With wsN.EnumPrinterConnections
For iCount = 0 To .Count - 1 Step 2
S = .Item(iCount + 1) & " sur port: " & .Item(iCount)
MsgBox S
If InStr(1, S, MonImpr) > 0 Then
Fait = True
Exit For
End If
Next
End With
If Fait Then 'affecte l'imprimante à utiliser
wsN.SetDefaultPrinter Serveur & S
'ou (?)
'Application.ActivePrinter = S
Else
MsgBox "imprimante pas trouvée"
End If
End Sub
'=======================
MichD
Avatar
ThierryP
Bonjour Denis,
Merci de te pencher sur mon souci !
- La proc de Michel Pierron fonctionne (l'imprimante par défaut est bi en remplacée) mais Excel n'en tient pas compte : il faudrait utiliser Application.ActivePrinter, mais dans ce cas la syntaxe n'est pas bonne et o n revient à ce que j'ai déjà fait.
- Ta proc me renvoie une erreur automation dans la proc "Imprimante_Par_D éfaut"
à "For each objprinter" : objprinter reste à nothing, bien que co lInstalledPrinters ne soit pas vide. Mais de toutes façons, elle aussi change l'imprimante par défaut, ce qui n'affecte pas l'instance d'Exc el en cours (d'après mes tests!)
Mais je ne comprends toujours pas pourquoi le code que j'ai pondu (d'ailleu rs sûrement avec ton aide à l'époque !!) ne fonctionne pas s i je l'appelle depuis le before_print alors que tout est OK si je l'exà ©cute manuellement ?????
ThierryP
Avatar
MichD
Dans ta procédure, as-tu essayé ceci :
Remplacer ceci :
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Par :
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, ActivePrinter:=Color_Printer
MichD
Avatar
MichD
C'est n'est qu'une ligne de code :
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
ActivePrinter:=Color_Printer
MichD
Avatar
MichD
Et pourquoi pas une dernière proposition :
'-----------------------------------------------------------
Sub test()
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
'Exécute l 'impression
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'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
MichD
En supplément,
SonNom = "VMSERVTS01Copieur_Couleur sur Ne0"
Le nom tel qu'il est écrit dans le panneau de configuration de Windows (imprimantes)
MichD
Avatar
ThierryP
Merci beaucoup pour tous tes efforts !! ;o))
Ta dernière procédure fonctionne très très bien........ . à condition que je ne l'appelle pas depuis le workbook_beforeprint ! Dans ce cas, elle imprime en noir (imp. par défaut)
Là, je sèche.......
ThierryP
Avatar
JièL
Hello,
2 trucs me chiffonne
1 : tu devrais avoir 2 imprimantes dans le panneau de config, et elles
devraient avoir 2 noms différents comme celles d'Isabelle, les ports on
s'en fout, non ?
2 : si ta procédure fonctionne "normalement" sauf si tu la met dans le
beforeprint, pourquoi ne pas mettre le changement d'imprimante sur le
changement de feuille ? Parce que si j'ai bien compris, tu dois avec
telle imprimante si tu es sur telle feuille, non ?
J'dis ça, j'dis rien
--
JièL diseur de rien
Le 15/12/2016 à 17:22, ThierryP a écrit :
Merci beaucoup pour tous tes efforts !! ;o))
Ta dernière procédure fonctionne très très bien......... à condition que je ne l'appelle pas depuis le workbook_beforeprint ! Dans ce cas, elle imprime en noir (imp. par défaut)
Là, je sèche.......
ThierryP
1 2