Imprimer un PDF avec Excel 2010
Bonjour à tous,
J'ai une macro qui a un moment dans ça vie me créer un pdf. Jusque là tout va bien.
Plus tard dans la vie de cette belle macro, j'éprouve le besoin d'imprimer le pdf en question (chemin et nom connu) sur une imprimante (également connue) qui n'est pas l'imprimante par défaut.
J'ai essayé plein de morceaux de code trouvé un peu partout sur le net et j'arrive à deux conclusion :
- Je n'arrive pas a sélectionner l'imprimante [c'est toujours la même imprimante, j'aimerais ne pas passer par une boite de dialogue pour selectionner l'imprimante] (Application.ActivePrinter = "HP LaserJet MFP E82540 (MAG) on Ne04:" me renvoi un message d'erreur)
- Je n'arrive pas a imprimer le pdf (je n'ai pas besoin de l'ouvrir, je voudrais pouvoir l'imprimer et que ce soit transparent pour l'utilisateur)
Merci à tous
En farfouillant un peu plus j'ai trouvé ça : https://forum.excel-pratique.com/s/goto/450212
J'arrive maintenant à imprimer le pdf. Mais toujours pas sur la bonne imprimante :(
Bon...
J'ai réussi à utiliser Application.ActivePrinter = "HP LaserJet MFP E82540 (MAG) on Ne04:"...l'erreur venait du "on Ne04:". Il fallait écrire "sur Ne04:"
Par contre, il semblerait que mon bout de code imprime sur l'imprimante par défaut quoi qu'il arrive...
Savez vous comment changer via vba et excel, l'imprimante par défaut sous windows ?
Sub Imprimer(NomFichier As String)
Dim MonImprimante As String
Dim MonImprimanteDefaut As String
MonImprimante = "HP Color MFP E87640-50-60 PCL-6 (V4) sur Ne04:"
MonImprimanteDefaut = "HP LaserJet MFP E82540 (MAG) sur Ne03:"
Application.ActivePrinter = MonImprimante
'MsgBox (Application.ActivePrinter)
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
ShellExecute x, "print", NomFichier, "", "", 2
ActivePrinter = MonImprimanteDefaut
'MsgBox (Application.ActivePrinter)
End SubMerci à tous
Bon... J'arrive à changer l'imprimante par défaut dans le panneau de configuration (je vois le changement au fur et a mesure de la progression de la macro.
MAIS...excel ne semble pas prendre en compte se changement. Il ne se préoccupe que de l'imprimante par défaut lors de l'ouverture de Excel.
En gros :
Imprimante "A" par défaut dans le panneau de conf
J'ouvre excel
Je défini l'imprimante "B" par défaut dans Excel
Le changement s'effectue dans le panneau de conf
Impression sur imprimante "A"
Je ferme Excel
J'ouvre Excel sans effectuer aucun changement sur la sélection d'imprimante
Impression sur imprimante "B"...
C'est entrain de me rendre fou cette histoire...
Sub Imprimer(NomFichier As String)
Dim MonImprimante As String
Dim MonImprimanteDefaut As String
Dim MyNetwork As Object
MonImprimante = "HP Color MFP E87640-50-60 PCL-6 (V4)" ' sur Ne04:"
MonImprimanteDefaut = "HP LaserJet MFP E82540 (MAG)" ' sur Ne03:"
''''''''''Choix Imprimante''''''''''''''''''''''''
Set MyNetwork = CreateObject("WScript.network")
MyNetwork.SetDefaultPrinter MonImprimante
''''''''''Impression''''''''''''''''''''''''''''''
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
ShellExecute x, "print", NomFichier, "", "", 1
''''''''''Retour à l'imprimante "de base" ''''''''''''''''''''''''
MyNetwork.SetDefaultPrinter MonImprimanteDefaut
End SubBonjour Lenain,
Déconnecte toi de l'imprimante B, via le panneau de configuration de Windows.
Bien cordialement,
Bonjour,
Qu'entends tu par "déconnecter".
Pour préciser :
Imprimante A
J'ouvre Excel
Je change manuellement pour imprimante B par défaut dans le panneau de conf
Excel Imprim sur l'imprimante A
Je ferme, j'ouvre Excel.
Impression sur l'imprimante B
En gros, que je fasse le changement d'imprimante par défaut dans excel ou dans le panneau de conf, le résultat est le même
Si je part de l'imprimante B pour aller vers l'imprimante A, c'est la même chose.
Cdt,
Je comprends pas bien pourquoi mais il semble qu'en compilant les deux méthodes précédentes, l'impression fonctionne
MonImprimanteDefautEx = "HP Color MFP E87640-50-60 PCL-6 (V4) sur Ne04:"
MonImprimanteEx = "HP LaserJet MFP E82540 (MAG) sur Ne03:"
MonImprimanteDefaut = "HP Color MFP E87640-50-60 PCL-6 (V4)" ' sur Ne04:"
MonImprimante = "HP LaserJet MFP E82540 (MAG)" ' sur Ne03:"
Set MyNetwork = CreateObject("WScript.network")
MyNetwork.SetDefaultPrinter MonImprimante
ActivePrinter = MonImprimanteEx
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
ShellExecute x, "print", NomFichier, "", "", 1
MyNetwork.SetDefaultPrinter MonImprimanteDefaut
ActivePrinter = MonImprimanteDefautExEdit :
Le secret est dans la pendule. Le temps d'ouvrir le fichier et de lancer l'impression, l'imprimante par défaut avait de nouveau changé. Du cou :
MonImprimanteEx = "HP Color MFP E87640-50-60 PCL-6 (V4) sur Ne04:"
MonImprimanteDefautEx = "HP LaserJet MFP E82540 (MAG) sur Ne03:"
MonImprimante = "HP Color MFP E87640-50-60 PCL-6 (V4)" ' sur Ne04:"
MonImprimanteDefaut = "HP LaserJet MFP E82540 (MAG)" ' sur Ne03:"
Set MyNetwork = CreateObject("WScript.network")
MyNetwork.SetDefaultPrinter MonImprimante
ActivePrinter = MonImprimanteEx
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
ShellExecute x, "print", NomFichier, "", "", 1
Application.Wait Now + TimeValue("0:00:05") 'Temps d'attente
MyNetwork.SetDefaultPrinter MonImprimanteDefaut
ActivePrinter = MonImprimanteDefautExDernier petit point à corriger :
Il faut que j'imprime en 3 exemplaires