EXIT.SUB si imprimante X non sélectionnée

Résolu
VDB.57 -  
 VDB.57 -
Bonjour,

J'ai encore besoin de votre savoir,

Je voudrais un code qui arrête ma macro si l’imprimante nommée « EPSON TM20 » n’est pas sélectionnée
IF « imprimante XX non sélectionnée »
Exit Sub
End If

Puis la suite de mon code

Merci pour votre réponse

9 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Quelle est la version de VB ? (VBA, VB6, VBS, VB.NET, ... )

    En VBA/VB6, il y a l'objet Printer qui peut peut-être t'aider.
    0
  2. VDB.57
     
    Bonjour NHenry,

    Merci de prendre en compte ma demande.

    C'est du VBA
    0
  3. VDB.57
     
    Merci pour ta réponse, mais vu mes connaissances ce site ne m'aide pas.
    0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Que te donne ce code :

    Sub test()
        MsgBox ActivePrinter
    End Sub 

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. VDB.57
     
    Je dois sûrement manquer de précision.
    J’ai 2 imprimantes (1 EPSON et 1 CANON) qui ne sont jamais raccordées en même temps sur l’ordinateur portable.
    Dans mon classeur j’ai un bouton « A » avec une macro impression, qui doit imprimer uniquement sur l’imprimante EPSON.
    Si l’imprimante CANON est raccordée et pas l’imprimante EPSON, la macro de mon bouton « A » ne doit pas se lancer.
    En espérant avoir été plus explicite, je vous remercie.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Au risque de me répéter, que te donne ce code :

      Sub test()
          MsgBox ActivePrinter
      End Sub 


      Avec l'une et/ou l'autre imprimante raccordée à ton ordinateur portable.
      0
  7. VDB.57
     
    Merci à vous pour votre implication,

    Votre code me donne le nom de l'imprimante raccordée.Ce n'est pas ce que je recherche.

    J'aimerai un code qui dit:

    Si l'imprimante "EPSON" n'est pas raccordée

    Alors j'arrête la macro (exit sub)

    Si elle est raccordée

    Alors je continue ma macro (end if)
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Tu as le nom de l'imprimante, maintenant à toi de faire le code qui va avec.
      0
  8. VDB.57
     
    Si je me tourne vers vous c'est que mes connaissances dans le domaine sont plus que limitées.

    Je ne suis pas capable d'écrire ce code.

    Merci quand même.
    0
    1. Utilisateur anonyme
       
      Bonsoir VDB.57,

      Je crois avoir trouvé ce qu'il te faut ici ; regarde successivement
      les 3 messages suivants (n° message à droite et au bout) :

      a) le #1 d'andre michel, qui a le même problème que toi
      b) le #4 qui est la solution apportée par Docmarti
      c) le #5 d'andre michel qui confirme que c'est ok

      Bon courage pour lire le code VBA, car il est très technique et assez long !
      Il se peut que tu doives juste te contenter de le copier / coller, sans plus.

      Je compte sur toi pour nous informer si tu as réussi à utiliser sa solution.
      Si oui, tu pourras passer ce sujet en résolu. Cordialement.  😊
       
      0
      1. VDB.57 > Utilisateur anonyme
         
        Bonsoir Albkan,
        Comme tu me l’as demandé J’ai regardé le code de Docmarti il ne fonctionne pas chez moi.
        Je pensais que ma demande était assez simple, mais apparemment ça n’est pas le cas.
        Comme je l’expliquai, SI l’imprimante « EPSON TM » est raccordée alors J’imprime, SI NON je n’imprime pas.
        Un code qui ressemblerait un peu à ça :
        If (code imprimante Epson non raccordée) Then
        Exit Sub
        End If '
        Mais vu mes faibles connaissances je me trompe sûrement. J’ai un peu honte de vous solliciter de la sorte.
        0
      2. Utilisateur anonyme > VDB.57
         
        Bonsoir VDB.57,

        Non, non, tu n'as aucune honte à avoir : le site CCM est un forum d'entraide
        qui est fait pour ça, et ça me fait plaisir de rendre service quand j'en ai le temps
        et que c'est dans mes compétences ; mais je reconnais que même pour moi,
        le code très technique de Docmarti n'est pas évident !

        Je crois que ce code « dialogue » avec une API (Application Program Interface)
        de Windows pour pouvoir détecter l'état de l'imprimante : au repos, en cours
        d'impression (= busy), en réchauffement, ou hors ligne.

        Je ne sais pas bien si le « hors ligne » correspond à « imprimante réseau qui
        n'est pas connectée au réseau » ou « imprimante débranchée et donc non
        connectée ».

        Mais toi, qu'appelles-tu « raccordée » ? Est-ce raccordée à un réseau ou
        simplement branchée : tu as mis la prise et ton Epson est allumée ?

        D'autre part, as-tu une seule imprimante ? Ou en as-tu plusieurs et tu veux
        savoir si l'une d'elles, par exemple l'« EPSON TM » est « raccordée » ?

        Je demande ça car si tu as plusieurs imprimantes, il faut pouvoir détecter
        la bonne ; dans le code de Docmarti, la ligne de code #21 est là pour
        pouvoir vérifier toutes les imprimantes installées :

        For Each objPrinter In colInstalledPrinters
        

        colInstalledPrinters : ce nom commence par col pour se rappeler que suite à
        son affectation, il contient la collection de toutes les imprimantes installées
        (donc toutes celles qui sont dans « Périphériques et imprimantes ») ; rappel :
        For each = pour chaque, donc objPrinter contient au fur et à mesure une
        seule des imprimantes installées ; obj est pour se rappeler que c'est une
        variable de type objet.

        La ligne de code #23 vérifie si le nom de l'imprimante installée
        objPrinter est l'imprimante active (car objPrinter.name) :

        If InStr(Application.ActivePrinter, objPrinter.name) Then
        

        Je n'en suis pas sûr, mais je pense que imprimante active = celle qui est
        sélectionnée par défaut (voir Périphériques et imprimantes).

        Enfin, ton code pourrait être :

        If (code imprimante Epson non raccordée) Then Exit Sub ' sur la même ligne
        ' ici, code exécuté si imprimante raccordée => instructions d'impression
        

        À te lire, cordialement.  😊
         
        0
      3. VDB.57 > Utilisateur anonyme
         
        Merci pour ces mots,

        J'ai 2 imprimantes mais il n'y aura toujours qu'une seule branchée sur mon portable, Elle sera alimentée 220V (prête à l'emploi) et raccordée sur une prise USB du portable.

        Il se fait tard, j'essayerai demain tes codes.

        Je te souhaite une bonne nuit et te remercie encore.

        Cordialement
        0
    2. Utilisateur anonyme
       
       
      Ajout : va dans Panneau de configuration / Périphériques et imprimantes
      et regarde le nom que tu as donné à ton imprimante par défaut (celle où
      tu imprimes habituellement).

      Dis-moi quel est ce nom, et aussi ce qu'affiche cette Sub :

      
      Sub Essai()
        MsgBox "Imprimante active : " & Application.ActivePrinter
      End Sub
      
      

      Le nom de ton imprimante apparaît-il dans la chaîne de caractères
      affichée par l'instruction MsgBox ? Il le faut pour que l'état (statut)
      de ton imprimante puisse être testé !

      Je ne suis pas sûr que tu as correctement implémenté le code de
      Docmarti : Function TesterActivePrinter(...) As Long ET appel de
      cette fonction via la Sub test() située en dessous.

      Aussi, ce serait mieux que tu mettes un lien Cjoint sur ton fichier
      Excel correspondant (sauf si tu arrives à résoudre ton problème
      avec toutes les nouvelles infos des messages #13 et #15).

      Je viens de voir ton message #14, mais je poste quand même
      celui-ci. Bonne nuit également, et à demain.  😊
       
      0
  9. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Inutile de te lancer dans des usines à gaz.
    Si tu veux juste vérifier que ton imprimante active est l'Epson, il te suffit de tester ActivePrinter comme ceci :
    Sub Test_Imprimante()
        If Not UCase(ActivePrinter) Like "*EPSON*" Then Exit Sub
        'le reste de ton code ici
    End Sub


    0
  10. VDB.57
     
    Bonsoir Albkan et Pijaku,

    Un grand merci à vous deux pour votre dévouement et votre aide précieuse que j'ai pu apprécier à plusieurs reprises.

    Le code: If Not UCase(ActivePrinter) Like "*EPSON*" Then Exit Sub

    fonctionne parfaitement.

    Encore Merci et bonne soirée
    0