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 !)
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
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
'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
'-----------------------------------------------------------
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
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))