IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Excel VBA : Etat imprimante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut Excel VBA : Etat imprimante
    Bonjour à tous,

    J'ai un soucis sur une macro VBA (Office 365) et ne trouve pas de solution malgrés les différents postes consultés.

    J'ai une imprimante, dédié aux étiquettes, installée sur le PC.
    J'ai un fichier excel qui rassemble toutes les informations, les rentres dans un template Word et lance l'impression de l'étiquette. Jusque là, tout va bien.

    Mon problème c'est que lorsque l'imprimante est débranché, ma macro continue de lancer les impressions sur l'imprimante et donc me crée une liste d'attente.
    (ce qui me fait imprimer des étiquettes inutiles lorsque je la rebranche)

    Je souhaites "détecter" lorsque mon imprimante n'est pas branché/hors service afin de pouvoir le signaler à l'utilisateur et ne pas créer de file d'attente.

    J'ai essayé de détecté un code d'erreur, mais comme l'imprimante existe et seulement l'état est déconnecté, il n'y a pas d'erreur.

    Pour info : le nom de l'imprimante est connue, elle est branché en USB.

    J'espère avoir été suffisamment clair.

    Merci d'avance,
    Zeabon

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Bonjour

    Je n'ai pas trouvé la solution

    ceci peut peut être être un début de réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Reponse = MsgBox("L'imprimante est-elle allumée et alimentée en papier ?", vbYesNo)
    If Reponse = vbNo Then Cancel = True
     
    'Code pour imprimer
     
    End Sub
    Le texte pouvant être adapté a l'utilisateur.

  3. #3
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Option précisant l'imprimante sélectionnée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Reponse = MsgBox("L'imprimante sélectionnée est : " & Application.ActivePrinter & Chr(10) & " est-elle allumée et alimentée en papier ?", vbYesNo)
    If Reponse = vbNo Then Cancel = True
     
    'Code pour imprimer
     
    End Sub

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 249
    Par défaut
    hello,
    tu peux utiliser une requête WMI sur l'objet Win32_Printer pour savoir si ton imprimante est OffLine.
    Voici un bout de code qui renvoie le nom de l'imprimante par défaut puis liste toutes les imprimantes en affichant si elles sont hors tension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub testprinter() 
        Dim strPrinter
        strPrinter = Application.ActivePrinter
        Debug.Print "Imprimante par défaut : "; strPrinter
        Debug.Print "==========================================="
        Dim objWMIService
        Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        Dim colPrinters
        Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")
        Dim objPrinter
        For Each objPrinter In colPrinters
            Debug.Print objPrinter.Name
            Debug.Print objPrinter.WorkOffline
            Debug.Print "==========================================="
        Next
    End Sub
    Si tu ne veux voir que l'état de l'imprimante par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub testprinter() 
        Dim objWMIService
        Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        Dim colPrinters
        Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer Where Default = True ")
        Dim objPrinter
        For Each objPrinter In colPrinters
            Debug.Print objPrinter.Name
            Debug.Print objPrinter.WorkOffline
            Debug.Print "==========================================="
        Next
    End Sub


    Ami calmant, J.P

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Bonjour a_diard,

    Je vois ce que tu veux faire mais mon objectif c'est d'automatiser.
    je ne veux pas laisser le choix à l'utilisateur et ajouté des fenêtres de validation à chaque fois (j'en ai déjà plein à côté).
    Et au pire, ils ont un bouton de réimpression de disponible.
    Merci à toi pour ton aide.


    Bonjour Jurassic pork,

    Je ne connaissait pas les requêtes WMI. Je regarde ça.

    Je serais plus tenté par l'état de l'imprimante par défaut :
    - Je mets l'imprimante en par défaut
    - Si erreur<> 0 => Imprimante non installé sur le pc
    - Sinon test si Offline avec ton code
    - Impression si tout est OK.

    Je reviens vers vous dès que j'ai testé.

    Merci à vous.

    Zeabon

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Re-bonjour à tous,

    Je viens de tester la solution de jurrasic pork et tout marche nickel.

    Je donne la partie de test (comme expliqué dans le mail précédent) pour ce que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
        On Error Resume Next
        err.Clear
        ImprNow = Imp_Label.ActivePrinter
        Imp_Label.ActivePrinter = "TSC TC310"
        If err <> 0 Then
            Msg = MsgBox("Imprimante d'étiquette non installé. Veuillez contacter le service informatique pour faire l'installation.", , "Impression impossible")
        Else
            Dim objWMIService
            Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
            Dim colPrinters
            Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer Where Default = True ")
            Dim objPrinter
            For Each objPrinter In colPrinters
                If objPrinter.WorkOffline = False Then
                    Imp_Label.Run ("Label.docm'!Impression.Impr")
                Else
                    Msg = MsgBox("Imprimante d'étiquette non connecté.", , "Impression impossible")
                End If
            Next
        End If
        Imp_Label.ActivePrinter = ImprNow
    Merci à vous.

    Zeabon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA Excel Changement d''imprimante impossible
    Par verdenals dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2017, 17h51
  2. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  3. [excel vba]case à cocher dans excel pour plusieurs lignes
    Par fcoisb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2005, 11h23
  4. EXcel VBA analyse de sharpe
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/02/2005, 13h07
  5. [Excel - VBA] Problème de suppression de lignes...
    Par beholder2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/01/2005, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo