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

Résolu/Fermé
VDB.57 - 6 août 2016 à 21:32
 VDB.57 - 9 août 2016 à 21:42
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
A voir également:

9 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
6 août 2016 à 22:04
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
Bonjour NHenry,

Merci de prendre en compte ma demande.

C'est du VBA
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
7 août 2016 à 22:36
Une recherche rapide sur le net "VBAcurrent printer", voici une page intéressante :
https://wordmvp.com/FAQs/MacrosVBA/ChangeCurPrinter.htm
0
Merci pour ta réponse, mais vu mes connaissances ce site ne m'aide pas.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 août 2016 à 11:44
Bonjour,

Que te donne ce code :

Sub test()
    MsgBox ActivePrinter
End Sub 

0

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

Posez votre question
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
8 août 2016 à 16:36
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
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
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
8 août 2016 à 17:55
Tu as le nom de l'imprimante, maintenant à toi de faire le code qui va avec.
0
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
Utilisateur anonyme
8 août 2016 à 19:25
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
VDB.57 > Utilisateur anonyme
8 août 2016 à 22:01
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
Utilisateur anonyme > VDB.57
8 août 2016 à 22:59
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
VDB.57 > Utilisateur anonyme
8 août 2016 à 23:35
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
Utilisateur anonyme
8 août 2016 à 23:44
 
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
9 août 2016 à 08:03
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
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