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-03-04T12:28:08+00:00

    | On y mettra le résultat.

    Merci pour ceux que la chose intéresse! ;-)   MichD

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-03-04T12:16:08+00:00

    Aucun souci, bien au contraire.

    Par contre, je n'ai pas trouvé, sur ce forum, comment t'adresser un message personnel ; je te donne donc ici l'une de mes adresses électroniques (celle qui craint le moins, un peu passe-partout !) :

    Je réitère mes remerciements.

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-03-04T06:47:48+00:00

    Bonjour

    Merci pour ces éléments, je vais travailler dessus.
    Si ça ne vous ennuie pas, on va continuer en direct, plutôt que d'encombrer le forum avec ces éléments qui n'intéressent que nous.
    On y mettra le résultat.
    Je crois avoir votre adresse électronique à travers les liens de copie d'image que vous avez donné.

    Bonne journée.

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2013-03-03T21:00:04+00:00

    Voici donc la copie de la fenêtre Exécution :

    Imprimante avec unité : 'Canon MG5300 series Printer WS sur Ne03:'Imprimante : 'Canon MG5300 series Printer WS'SP InventaireBacsImpr 276          Sélection automatique 7            Réceptacle arrière 267          Cassette 269          Alimentation en continu 270          Allocation de papierSP InventaireBacsImpr --- SortieSP CodeBacParDefautValeur du bac par défaut : 267SP CodeBacParDefaut -- sortie normale 267Bac par défaut avant 1 : 267SP ChoixBac Paramètre : Réceptacle ArrièreSP InventaireBacsImpr 276          Sélection automatique 7            Réceptacle arrière 267          Cassette 269          Alimentation en continu 270          Allocation de papierSP InventaireBacsImpr --- SortieJe ne pensais pas que cela serait aussi compliqué et te demanderait autant de travail. Je t'en suis reconnaissante.

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

    0 commentaires Aucun commentaire