Macro pour choix entre 2 fonctions imprimantes avec Excel

Anonyme
2013-02-28T22:36:13+00:00

Bonsoir,

Absente durant quelques semaines, je n'ai pas relancé plus tôt ma demande faisant l'objet du sujet suivant :

http://answers.microsoft.com/fr-fr/office/forum/office_2010-customize/macro-pour-choix-entre-2-fonctions-imprimantes/8ade7cbd-5821-4ac8-9538-d98317796f3e?page=1

En effet, la réponse que j'ai obtenue me satisfaisait pleinement concernant Word.

Par contre, j'aimerais obtenir l'équivalent avec Excel car je ne parviens pas à faire fonctionner cette macro avec ce logiciel.

En espérant vraiment que vous pourrez m'aider.

Je vous en remercie à l'avance

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
Anonyme
2013-04-11T20:05:41+00:00

Bonsoir

Nous avons trouvé une solution qui marche, mais qui n'est malheureusement pas indépendante de l'imprimante.
L'idée a été d'utiliser des Sendkeys pour simuler les opérations manuelles.
Le résultat est plus ou moins aléatoire car on ne maîtrise pas quel processus va prendre en compte les commandes lancées à la volée.
Une découverte : le programme Sendkeys.exe :
http://orlando.mvps.org/SendKeysMore.asp
Il a pour avantage principal de pouvoir choisir à quelle fenêtre les commandes sont adressées.
Il a d'autres intérêts que vous pourrez découvrir sur la page en question.

Le code vba est relativement simple, voici un exemple pour une imprimante spécifique.
La macro change de bac, imprime la feuille active et rechange de bac.
A adapter, bien sûr et adaptable facilement pour d'autres actions.

'-------------------------------------------------
' utilise le programme SendKeys.exe à télécharger ici
' http://orlando.mvps.org/SendKeysMore.asp
'  Adapter ici le chemin vers Sendkeys.exe
Private Const pg As String = "Chemin\SendKeys.exe"
Private Const SW_SHOWNORMAL = 1

Private Sub ChangeBac(B As String) ' paramètre : première lettre du nom du bac
' Note : En raison de l'utilisation de délais programmés
' ce code ne fonctionne pas correctement en mode pas à pas.
Dim Ret As Integer
Dim t As String
' pour rendre le code des commandes plus lisible
Dim Alt As String
Dim Ctrl As String
Dim Maj As String
Dim Tabulation As String
Dim Entrée As String
' paramétrage de Sendkeys.exe

Dim Arg1 As String 'attente initiale en secondes ou fractions
Dim Arg2 As String 'délai toléré pour l'apparition de la fenêtre
Dim Arg3 As String ' Nom de la fenêtre  ou handle si fenêtre lancée par Shell
Dim Arg4 As String ' Commandes à transmettre
Dim Arg5 As String ' (facultatif) 1- sans échec, 2- avec log
Dim NomImpr As String
Dim ModèleImpr As String
Dim Port As String
Dim p As Integer
Dim app As Excel.Application
Set app = Application
Alt = "%"
Ctrl = "^"
Maj = "+"
Tabulation = "{TAB}"
Entrée = "~"
   '--------------------------

NomImpr = Application.ActivePrinter
'Debug.Print "Imprimante avec unité : '" & NomImpr & "'"
' séparer modèle et port sous la forme " sur unité"
p = InStr(NomImpr, " sur ")
If p <= 0 Then
 ModèleImpr = NomImpr
 Port = ""
Else
 ModèleImpr = Left(NomImpr, p - 1)
 Port = Mid(NomImpr, p + 5)
End If
'Debug.Print "Modèle : '" & ModèleImpr & "'"
DoEvents

' Phase 1 : prépértaion des commandes à envoyer
' dans la fenêtre "choix de l'imprimante"
' choisir Alt+ C pour ouvrir la paramétrage du pilote
Arg1 = "0.1" ' lancement quasi immédiat
Arg2 = "4"  ' temps d'exécution toléré pour l'affichage de la fenêtre
' Nom de la fenêtre qui sera ouverte par Dialogs Show (plus bas)
Arg3 = """Choix de l'imprimante"""
Arg4 = "%C"
Arg5 = "2" 'Trace
' Regroupement des commandes et envoi
t = Arg1 & " " & Arg2 & " " & Arg3 & " " & Arg4 & " " & Arg5
Ret = Shell(pg & " " & t, vbNormalFocus)
' ici on pourrait vérifier la valeur de Ret.

' Phase 2 :  Choix du bac
' dans un premier temps, ne pas activer cette phase pour analyser
' ce qu'il y a à paramétrer selon le pilote de l'imprimante et refermer la fenêtre
Arg1 = "2"  ' attente de deux secondes (l'ouverture est assez lente)
Arg2 = "10" ' temps d'exécution toléré
Arg5 = "2" 'Trace
' Attention : caractère spécial avant le : qui suit
Arg3 = """Propriétés de" & Chr(160) & ": " & ModèleImpr & Chr(34)

' Cette imprimante permet d'ouvrir la liste des bacs avec Alt + l
' puis un caractère permet de choisir le bac souhaité.
' Entrée ferme la boite (positionnement par défaut sur OK)
'
' Pour d'autres imprimantes, il faut changer d'onglet,
' se déplacer par tabulations sucessives etc,
' toutes opérations à faire avec le clavier
' pour pouvoir les décrire ensuite ici.
Arg4 = Alt & "l" & B & Entrée
t = Arg1 & " " & Arg2 & " " & Arg3 & " " & Arg4 & " " & Arg5
Ret = Shell(pg & " " & t, vbNormalFocus)

' Phase 3  Fermeture de la fenêtre "choix de l'imprimante" : Entrée
'
Arg1 = "4"
Arg2 = "5" ' temps d'exécution toléré
Arg3 = """Choix de l'imprimante"""
Arg4 = Entrée
Arg5 = "2" 'Trace
t = Arg1 & " " & Arg2 & " " & Arg3 & " " & Arg4 & " " & Arg5
Ret = Shell(pg & " " & t, vbNormalFocus)
' Ouverture de la fenêtre "choix de l'imprimante"
Application.Dialogs(xlDialogPrinterSetup).Show
End Sub

Sub ImprimerAvecBacR()
' Choix du bac Rxxxxx
ChangeBac "R"
'impression de la feuille en cours
ActiveSheet.PrintOut
' Choix du bac Sxxxxx
' par exemple : Sélection automatique
ChangeBac "S"
End Sub

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

59 réponses supplémentaires

Trier par : Les plus récents
  1. Anonyme
    2013-04-01T20:34:34+00:00

    Bonsoir à tous,

    Je reviens vers vous tous afin de vous remercier pour vos participations et plus particulièrement Geo le Tourangeau avec qui j'ai eu de nombreux échanges privés afin de tenter de trouver une solution dans l'élaboration de cette macro.

    Il semblerait que mon imprimante Canon ne "veuille rien savoir" et "refuse de coopérer" ce qui fait que tous les codes fournis par Geo se sont révélés infructueux pour moi mais je suis certaine que pour d'autres configurations avec d'autres matériels, ils pourront rendre service à d'autres internautes.

    Merci encore à Geo pour le temps qu'il aura passé avec mon problème.

    Bonne nuit à tous

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-04-01T19:50:18+00:00

    Merci Geo pour cette procédure très fouillée.

    Comme mon imprimante n'a qu'un bac, je ne pourrai
    pas tester la procédure, mais je la conserve précieusement,
    elle pourrait m'être d'une grande utilité!

    Merci de l'avoir publié!  MichD

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-04-01T13:11:33+00:00

    Bonjour

    Une réponse partielle
    Ci joint, un module qui permet de changer de bac d'imprimante sous Excel :
    http://cjoint.com/13av/CDbo6jwJW34.htm

    Comme indiqué en commentaire de cette macro, le changement de bac n'est pas effectif pour l'Excel en cours, il faut donc quitter et ré-ouvrir pour imprimer avec le bac souhaité. Pratique !
    Une solution de contournement consiste à
    -changer de bac,
    -changer d'imprimante (de préférence avec une imprimante sur nul:), -revenir à l'imprimante d'origine qui a alors le bon bac
    -imprimer
    -remettre le bac d'origine,
    -changer d'imprimante (de préférence avec une imprimante sur nul:), -revenir à l'imprimante d'origine qui a alors le bac d'origine.
     Si je ne publie pas ce code complet c'est que ça marche bien chez moi, mais ce n'est pas vrai partout, sans qu'on sache pourquoi.
    Plutôt que de fournir un code qui n'est pas fiable, je m'abstiens par principe, mais si ça intéresse quelqu'un ...
    Comme dirait -qui vous savez-, il y a déjà dans le module joint, les outils qu'il faut.

    Autre déception : la description de l'imprimante active est différente sous Word et Excel.
    Pour Publisher l'imprimante active n'est pas au niveau de l'application mais du document.
    On ne peut même pas faire un module commun sans passer son temps (ou son code) à vérifier dans quelle application on est.

    Bonne semaine.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2013-03-05T21:11:17+00:00

    Bonsoir

    Si le document que tu prépares peut-être imprimer à partir de
    plusieurs imprimantes, tu pourrais avoir quelques surprises!

    Je ne suis pas certain d'avoir tout compris, là il est question de format de papier.
    Pour l'instant on essaie uniquement de changer de bac sur l'imprimante par défaut et ce n'est déjà pas simple, alors j'imagine si en plus on doit gérer des formats sur différentes imprimantes !

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire