determiner un port d'imprimante excel + vba

le.poke

XLDnaute Nouveau
Bonjour à tous & à toutes

Tout d'abord bravo pour le travail effectué ici, c'est vraiment une mine d'information très très utile!!!

Donc, j'ai besoin d'imprimer une feuille d'un classeur sur deux imprimantes différentes ... une en local l'autre en distant.

Le truc penible c'est que l'imprimante distante n'est jamais sur le même port, des fois elle est sur Ne00: ... des fois sur Ne01: ou encore en Ne02 et Ne03 etc ...

N'y a t'il pas moyen de connaitre le port de l'imprimante avant de lancer l'impression ???

Pour ce faire j'ai donc fait cette macro grâce à des infos pêchées ici, les auteurs se reconnaitrons (grand merci à eux d'ailleurs).:

###################################################

Code:
Sub Print_Commande()

'mise en mémoire de l'imprimante par défaut
Dim Default_Printer As String
Default_Printer = Application.ActivePrinter
   
   ' On imprime la feuille de commande en local
    Sheets("FeuilleDeCommande").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
   
   ' On test les différentes valeurs du port de l'imprimante distante
    For Port = 0 To 9
    Far_Far_Away_Printer = Range("Parametres!$I$8") & Port & ":"
    On Error Resume Next
   ' On imprime la feuille de commande sur l'imprimante distante
        Sheets("FeuilleDeCommande").Select
        Application.ActivePrinter = Far_Far_Away_Printer
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    If ActivePrinter = Far_Far_Away_Printer Then Exit For
    Next
        ' réinitialisation de l'imprimante par défaut
        Application.ActivePrinter = Default_Printer
   
End Sub
###################################################

La valeur de Parametres!$I$8 est => \\K12CDR4C\Q12CDRG0 sur ne0

En local le truc drôle c'est que ça m'imprime deux fois la feuille désirée, et en distant ............. 10 fois ! si si 10 fois la même feuille .... heureusement c'est la bonne feuille mais une fois me suffirait amplement !

Bref, après avoir essayé moult choses et n'ayant plus de feuilles pour faire mes essais ... j'abdicte et vous demande humblement votre aide.

Merci d'avance ... le.poke
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : determiner un port d'imprimante excel + vba

Bonsoir,

Si l'imprimante à utiliser n'est pas définie dans PrintOut, et sauf erreur de ma part, c'est l'imprimante par défaut qui devient l'imprimante active. Dans la ligne concernée écrivez donc :

Code:
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=Far_Far_Away_Printer, Collate:=True

et bien sûr supprimez la ligne précédente :

Code:
ActivePrinter = Far_Far_Away_Printer

A+
 
Dernière édition:

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

Bonjour job75

merci de la réponse ..

à priori la déclaration de l'imprimante distante est correcte, j'étais d'ailleurs passé par l'enregistreur de macro pour ce faire ... et ça fonctionne en temps et en lieu ... mais ça imprime vraiment beaucoup de fois la même feuilles sur cette imprimante distante ... ce que je ne m'explique pas, pas plus que la double impression en local ...

mais à défaut je testerai votre solution demain et vous tiendrez au courant.

Cordialement ... le.poke
 

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

Re bonjour

Bon ben j'ai testé votre soluce job75, j'ai toujours autant de feuilles qui sortent, une dizaine en tout pour une feuille demandée, le truc c'est que là tout sort sur la même imprimante c'est à dire : Far_Far_Away_Printer

J'avoue ne rien y comprendre.

Si quelqu'un a une idée je suis preneur ;)

Edit: cela dit je viens de voir que je n'avais pas mis de "End If" dans ma macro, vu qu'il y'a un "If"
Code:
    If ActivePrinter = Far_Far_Away_Printer Then Exit For
    Next

je vais essayer d'y coller un End If pour voir

Cordialement ... le.poke
 
Dernière édition:

MichelXld

XLDnaute Barbatruc
Re : determiner un port d'imprimante excel + vba

bonjour

j'espère que cette procédure qui permet de lister les propriétés des imprimantes installées t'aidera à identifier le port.
Je ne suis pas sur que ça fonctionne pour toutes les versions de Windows.


Code:
Sub lister_Proprietes_Imprimantes()
Dim objWMIService As Object, colInstalledPrinters As Object
Dim objPrinter As Object
Dim nomPC As String
 
nomPC = "."

Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\" & nomPC & "\root\cimv2")
Set colInstalledPrinters = objWMIService. _
    ExecQuery("Select * from Win32_Printer")
 
For Each objPrinter In colInstalledPrinters
    Debug.Print "Attributes: " & objPrinter.Attributes
    Debug.Print "Availability: " & objPrinter.Availability
    Debug.Print "AveragePagesPerMinute: " & objPrinter.AveragePagesPerMinute
    'Debug.Print "Capabilities: " & objPrinter.Capabilities
'    Debug.Print "CapabilityDescriptions: " & objPrinter.CapabilityDescriptions
    Debug.Print "Caption: " & objPrinter.Caption
    Debug.Print "ConfigManagerErrorCode: " & objPrinter.ConfigManagerErrorCode
    Debug.Print "ConfigManagerUserConfig: " & objPrinter.ConfigManagerUserConfig
    Debug.Print "CreationClassName: " & objPrinter.CreationClassName
    Debug.Print "DefaultPriority: " & objPrinter.DefaultPriority
    Debug.Print "Description: " & objPrinter.Description
    Debug.Print "DetectedErrorState: " & objPrinter.DetectedErrorState
    Debug.Print "DeviceID: " & objPrinter.DeviceID
    Debug.Print "DriverName: " & objPrinter.DriverName
    Debug.Print "ErrorCleared: " & objPrinter.ErrorCleared
    Debug.Print "ErrorDescription: " & objPrinter.ErrorDescription
    Debug.Print "HorizontalResolution: " & objPrinter.HorizontalResolution
    Debug.Print "InstallDate: " & objPrinter.InstallDate
    Debug.Print "JobCountSinceLastReset: " & objPrinter.JobCountSinceLastReset
    Debug.Print "LanguagesSupported: " & objPrinter.LanguagesSupported
    Debug.Print "LastErrorCode: " & objPrinter.LastErrorCode
    Debug.Print "Location: " & objPrinter.Location
    Debug.Print "Name: " & objPrinter.Name
    'Debug.Print "PaperSizesSupported: " & objPrinter.PaperSizesSupported
    Debug.Print "PNPDeviceID: " & objPrinter.PNPDeviceID
    Debug.Print "PortName: " & objPrinter.PortName
    Debug.Print "PowerManagementCapabilities: " & objPrinter.PowerManagementCapabilities
    Debug.Print "PowerManagementSupported: " & objPrinter.PowerManagementSupported
'    Debug.Print "PrinterPaperNames: " & objPrinter.PrinterPaperNames
    Debug.Print "PrinterState: " & objPrinter.PrinterState
    Debug.Print "PrinterStatus: " & objPrinter.PrinterStatus
    Debug.Print "PrintJobDataType: " & objPrinter.PrintJobDataType
    Debug.Print "PrintProcessor: " & objPrinter.PrintProcessor
    Debug.Print "SeparatorFile: " & objPrinter.SeparatorFile
    Debug.Print "ServerName: " & objPrinter.ServerName
    Debug.Print "ShareName: " & objPrinter.ShareName
    Debug.Print "SpoolEnabled: " & objPrinter.SpoolEnabled
    Debug.Print "StartTime: " & objPrinter.StartTime
    Debug.Print "Status: " & objPrinter.Status
    Debug.Print "StatusInfo: " & objPrinter.StatusInfo
    Debug.Print "SystemCreationClassName: " & objPrinter.SystemCreationClassName
    Debug.Print "SystemName: " & objPrinter.SystemName
    Debug.Print "TimeOfLastReset: " & objPrinter.TimeOfLastReset
    Debug.Print "UntilTime: " & objPrinter.UntilTime
    Debug.Print "VerticalResolution: " & objPrinter.VerticalResolution
Next

End Sub



bonne journée
michel
Microsoft Excel MVP
 

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

merci Michel,

je n'arrive pas trouver l'info sur le Ne0..... dans la tonne de données que retourne ta macro.

j'ai bien l'impression que le fait de lui demander de tester les ports de 0 à 9 "For Port = 0 To 9" envoi 10 demandes, une sur tous les ports ouverts et/ou accessibles de 0 à 9 ... faudrait lui mettre une espèce de "Stop" dés quand il en trouve un de fonctionnel ou quelque chose comme ça ...

bref je suis toujours dans le vague le plus total ... :(
 

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

bon

à force de chercher on trouve ... même si on sais pas trop quoi en faire on trouve des choses !

j'ai donc trouvé dans ce thread (en anglais) quelqu'un dans la même position que moi et dans les réponses on lui propose d'utiliser cette fonction :

Code:
Function NetworkPrinter(ByVal myprinter As String)
  On Error Resume Next
  Dim NetWork As Variant
  Dim X As Integer
  '/// Define NetWork Array \\\
  NetWork = Array("Ne00:", "Ne01:", "Ne02:", "Ne03:", "Ne04:", _
                   "Ne05:", "Ne06:", "Ne07:", "Ne08:", _
                   "Ne09:", "Ne10:", "Ne11:", "Ne12:", _
                   "Ne13:", "Ne14:", "Ne15:", "Ne16:", _
                   "LPT1:", "LPT2:", "File:", "SMC100:")
  'Setup printer to Print
  X = 0
TryAgain:
  On Error Resume Next
  'Printer
  Application.ActivePrinter = myprinter & Prt_On & NetWork(X)
  If Err.Number <> 0 And X < 16 Then
    X = X + 1
    GoTo TryAgain
  ElseIf Err.Number <> 0 And X > 15 Then
    GoTo PrtError
  End If
  On Error GoTo 0
  NetworkPrinter = myprinter & Prt_On & NetWork(X)
errorExit:
  Exit Function
PrtError:
  'no printer found
  NetworkPrinter = ""
  Resume errorExit
End Function

est ce que cela vous semble réaliste et, si oui comment dois je m'en servir ?
 

JCGL

XLDnaute Barbatruc
Re : determiner un port d'imprimante excel + vba

Bonjour à tous,

Un petit *.exe qui te donnera le chemin des imprimantes montées sur ton poste

Je crois me souvenir qu'il vient de chez nos amis Developpez.net ( ;) à MichelXLD)

A+
 

Pièces jointes

  • Chemin Imprimante.zip
    6.7 KB · Affichages: 535

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

merci beaucoup!

cela dit je connais déjà le chemin de mes imprimantes, ces chemins ne changent pas ... c'est juste le prot réseau des dites imprimantes (NeXX) qui n'arrête pas de changer :/

mais je vais tout même essayer ton soft bien que je doute que mon profil au taff me permette d'exécuter un .exe comme ça sans broncher ;)


Cordialement le.poke
 

kiki29

XLDnaute Barbatruc
Re : determiner un port d'imprimante excel + vba

Salut,en reprenant ton code et en le modifiant légèrement
Code:
Option Explicit

Sub Print_Commande()
Dim Default_Printer As String
Dim Port As Integer, Far_Far_Away_Printer As String

    Default_Printer = Application.ActivePrinter

    ' On imprime la feuille de commande en local
    Sheets("FeuilleDeCommande").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

    ' On test les différentes valeurs du port de l'imprimante distante
    For Port = 0 To 9
        'Parametres!$I$8 est => \\K12CDR4C\Q12CDRG0
        Far_Far_Away_Printer = Range("Parametres!$I$8") & " sur Ne0" & Port & ":"
        On Error Resume Next
        ActivePrinter = Far_Far_Away_Printer
                
        If ActivePrinter = Far_Far_Away_Printer Then
            Sheets("FeuilleDeCommande").Select
            ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
            Exit For
        End If
    Next

    Application.ActivePrinter = Default_Printer

End Sub
 
Dernière édition:

le.poke

XLDnaute Nouveau
Re : determiner un port d'imprimante excel + vba

@kiki29

Merci beaucoup ça fonctionne parfaitement de cette manière ... vraiment bravo !!

@PascalXLD

Oui j'avais déjà visité ces posts, merci d'ailleurs car une partie de ma macro est inspiré d'un truc à toi, je le mentionne d'ailleurs dans le premier post :p

Pour ce faire j'ai donc fait cette macro grâce à des infos pêchées ici, les auteurs se reconnaitrons (grand merci à eux d'ailleurs).:

################################################## #
Code:
Sub Print_Commande()

'mise en mémoire de l'imprimante par défaut
Dim Default_Printer As String
Default_Printer = Application.ActivePrinter
   
   ' On imprime la feuille de commande en local
    Sheets("FeuilleDeCommande").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
   
   ' On test les différentes valeurs du port de l'imprimante distante
    For Port = 0 To 9
    Far_Far_Away_Printer = Range("Parametres!$I$8") & Port & ":"
    On Error Resume Next

Encore une fois merci pour votre aide !!

Cordialement ... le.poke
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 858
Membres
103 978
dernier inscrit
bderradji