Problème d'impression

Bonjour,

J'ai un fichier sur lequel j'ai créé une macro pour l'impression.

Le problème est que la macro renvoie une erreur 1004 : La méthode 'ActivePrinter' de l0objet'_Application' a échoué. Je suppose que cela provient du fait que le port de l 'imprimante change d'un pc à l'autre.

Avez-vous une solution ? J'avais trouvé ceci sur un forum, mais je ne sais pas comment le modifier pour l'intégrer dans ma macro :

Dim aa as Byte
Dim Nom as String
For aa = 0 to 9
Nom = "\\sfrwng051\PFRWNG0742 sur Ne0" & aa & ":"
On Error Resume Next
Application.ActivePrinter = Nom
If ActivePrinter = Nom Then Exit For
Next
2test.xlsm (105.95 Ko)

Bonjour, pas uniquement ?? d'un pc à l'autre l'imprimante elle même peut changer.

Pourquoi vouloir préciser une imprimante ? la fonction print out prendra l'imprimante déclarée par defaut dans windows.

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False

Bonjour

Essayez peut être en changeant ceci -->

If Application.ActivePrinter = Nom Then Exit For

Dans la boucle, vous pouvez aussi vérifier quelles sont les imprimantes actives avec cette instruction

MsgBox "Imprimante active est " & Application.ActivePrinter

Cordialement

Bonjour,

Voici une proposition de code pour définir une imprimante en fonction d'un mot clé :

Sub princ()
'debut code
DefinirImprimante "PFRWNG0742"
'impression et fin code
end sub

Function DefinirImprimante(MotCle$) 'définit imprimante selon mot clé
With CreateObject("WScript.Network")
    For Each pconn In .EnumPrinterConnections
        If pconn Like "*" & MotCle & "*" Then .SetDefaultPrinter pconn: exit function
    Next pconn
end with
End Function

Cdlt,

Edit : Salut Xmenpl, Dan, je me sens moins seul tout d'un coup

Merci. Mon problème est que je souhaite envoyer sur une imprimante spécifique (papier A5) qui n'est pas l'imprimante par défaut.

Et la macro que j'avais trouvée permettait de remettre l'imprimante "normale" par défaut après l'impression.

Merci pour cette proposition.

A quel endroit dois-je l'introduire dans ma macro ?

bonjour,

edit : oups, la cavalerie ...

ceci fonctionne chez moi ...

Sub Impression()
    '
    ' Impression Macro
    '

    '
    Sheets("Imputation").Activate
    Dim ImprCour As String
    Dim Impr2 As String
    ImprCour = Application.ActivePrinter
    printerok = False
    For i = 0 To 9
        Impr2 = "EPSON Stylus DX8400 on Ne0" & i & ":"
        On Error Resume Next
        Application.ActivePrinter = Impr2
        On Error GoTo 0
        If Application.ActivePrinter = Impr2 Then
            printerok = True
            Exit For
        End If
    Next i
    If printerok Then
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    End If
    Application.ActivePrinter = ImprCour
    Sheets("Saisie").Select
    Range("I2").Select
End Sub

Super, merci beaucoup.

Si j'ai bien compris, je remplace juste le nom de l'imprimante par le mien (MF - Rez sup Facturation) et je laisse la suite (on Ne0) ?

A quel endroit dois-je l'introduire dans ma macro ?

A qui s'adresse le message ?

Ca s'adressait à h2so4...

En fait j'ai essayé, mais cela ne fonctionne pas.

Je suis allé voir l'adresse de l'imprimante qui était sur NE00 et maintenant elle est sur NE25.

Y aurait-il une solution pour "scanner" les adresse de 01 à 99 ??

Je suis désolé mais je n'y comprends rien et je ne sais pas pourquoi cela change...

Pouvez-vous poster votre code, lié à l'impression, en entier ?

Cdlt,

Le voici :

Sub Impression()
'
' Impression Macro
'

'
Sheets("Imputation").Activate
Dim ImprCour As String
Dim Impr2 As String
ImprCour = Application.ActivePrinter
printerok = False
For i = 0 To 9
Impr2 = "MF - Rez sup Facturation on Ne0" & i & ":"
On Error Resume Next
Application.ActivePrinter = Impr2
On Error GoTo 0
If Application.ActivePrinter = Impr2 Then
printerok = True
Exit For
End If
Next i
If printerok Then
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End If
Application.ActivePrinter = ImprCour
Sheets("Saisie").Select
Range("I2").Select
End Sub

re-bonjour,

pour aller au-delà de 9, bien vérifier la casse du nom de l'imprimante !

Sub Impression()
    '
    ' Impression Macro
    '

    '
    Sheets("Imputation").Activate
    Dim ImprCour As String
    Dim Impr2 As String
    ImprCour = Application.ActivePrinter
    printerok = False
    For i = 0 To 99
        Impr2 = "MF - Rez sup Facturation sur Ne" & Format(i, "00") & ":"
        On Error Resume Next
        Application.ActivePrinter = Impr2
        On Error GoTo 0
        If Application.ActivePrinter = Impr2 Then
            printerok = True
            Exit For
        End If
    Next i
    If printerok Then
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    End If
    Application.ActivePrinter = ImprCour
    Sheets("Saisie").Select
    Range("I2").Select
End Sub

Avez vous essayé de placer l'instruction MSGBOX comme je vous ai suggéré. cela vous permet de suivre ce que le code lit. Je la placerais après chaque Impr

Au moins vous verrez les valeurs impr

printerok = False

Pourquoi cette instruction ?

Pourquoi cette instruction ? Aucune idée, j'ai recopié ce que h2so4 a suggéré.

En ce qui concerne la 'message box', ce que je souhaite ,c'est que les utilisateurs puissent imprimer sans se poser de question et rapidement sur l'imprimante alors que j'ai l'impression que ce message serait de nature à les ralentir et le perturber. Ou alors je n'ai pas compris ?

Voici un essai d'adaptation en utilisant la fonction (à placer à la suite de cette macro) :

Sub Impression()
Dim ImprCour As String
ImprCour = Application.ActivePrinter
DefinirImprimante "PFRWNG0742"
Sheets("Imputation").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
DefinirImprimante ImprCour
End Sub

Function DefinirImprimante(MotCle$) 'définit imprimante selon mot clé
With CreateObject("WScript.Network")
    For Each pconn In .EnumPrinterConnections
        If pconn Like "*" & MotCle & "*" Then .SetDefaultPrinter pconn: exit function
    Next pconn
end with
End Function

Cdlt,

bonjour à tous,

pourquoi cette instruction

printerok = False

printerok est une variable booléenne qui sert à déterminer si l'activation de l'imprimante a pu se faire. le contenu de cette variable est testé afin de lancer ou non l'impression. Au départ cette variable est initialisée = false et reçoit la valeur true, si l'activation de l'imprimante réussit.

J'ai enfin pu tester et cela fonctionne parfaitement.

Un immense MERCI pour votre aide !!!

Cordialement.

Rechercher des sujets similaires à "probleme impression"