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-04T20:10:46+00:00

    Bonsoir

    Merci pour ceux que la chose intéresse!

    promis ! :-)

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-03-04T20:10:08+00:00

    Bonsoir

    As-tu noté mon adresse, auquel cas je modifie mon message afin de la supprimer...

    Les adresses sont filtrées, seul Microsoft et l'auteur peuvent les voir.
    J'essaie un message direct ce soir.
    Sinon je reviens ici.

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-03-04T14:37:26+00:00

    Mes publications, je les fais toujours via le
    groupe de discussion et non en privé.

    Et pour le cas présent, il y a toujours la possibilité de définir
    des "affichages personnalisés"

    Pour chaque affichage personnalisé, tu peux définir :

    • la dimension et la position de la fenêtre
    • la largeur des colonnes
    • les colonnes ou les lignes à masquer, le cas échéant
    • plus tous les paramètres d'impression...

    Tu peux créer autant d'affichage personnalisé que tu désires
    de la même feuille. Parmi ces paramètres, tu peux définir
    le bac à utiliser et le format de papier désiré si tu le veux!

    Par hasard, je suis tombé sur cette information sur le Web.
    Si le document que tu prépares peut-être imprimer à partir de
    plusieurs imprimantes, tu pourrais avoir quelques surprises!


    "bececoste49" a écrit dans le message de groupe de discussion : ******@communitybridge2.codeplex.com.excel...

    As-tu noté mon adresse, auquel cas je modifie mon message afin de la supprimer...
     -- http://answers.microsoft.com/message/f35d711f-c33f-4606-b2fd-a2e66979c510?threadId=fedcc6d3-b330-4da0-8cdf-b983ac35f048
    Meta tags: office_2010; excel; 401f8fb0-000c-4e12-b99b-9a4d54b284f7

    Mon, 4 Mar 2013 12:33:03  +0000: CreateMessage  bececoste49

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

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

    As-tu noté mon adresse, auquel cas je modifie mon message afin de la supprimer...

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

    0 commentaires Aucun commentaire