Famille de feuilles de calcul Microsoft avec des outils pour l’analyse, le graphique et la communication des données.
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