Imprimer des PDF depuis excel sur une autre imprimante que celle par défaut Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
G
Garenne
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 13 mars 2019
Version d'Excel : 2007

Message par Garenne » 13 mars 2019, 10:49

Bonjour, après plusieurs recherche je n'arrive pas a faire fonctionner correctement ma macro
Le but est d'imprimer des fichiers PDF depuis une imprimante autre que celle par défaut.

J'ai 2 problèmes, le premier est que pour chaque fichier à imprimer, j'ai une fenêtre qui s'ouvre me disant que le fichier peut être dangereux, etc..., malgrès le Application.DisplayAlerts = False. Est-il mal placé?
Le second est que j'ai bien une fenêtre qui me demande sur quelle fenêtre je souhaite imprimer mais l'impression se fait quand même sur l'imprimante par défaut et non sur celle choisi. Existe t-il une solution à ce problème?

Dans mon exemple il n'y qu'un fichier mais je peux fournir la macro complète si besoin ;)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String _
, ByVal lpParameters As String, ByVal lpDirectory As String _
, ByVal nShowCmd As Long) As Long

Sub PrintTest()

Application.DisplayAlerts = False

If MsgBox("Êtes-vous sûr de vouloir imprimer les notices de montage?", vbQuestion + vbYesNo, "Impression des notices de montage") = vbYes Then

    Dim ws As Worksheet
    Dim Chemin As String
    Dim NomFichier As String
    Dim Notice As String

    Set ws = Sheets("Notice de montage")
    Chemin = "\\SRV-SVL\Production\BE\Etude\Tunnel\Notice tunnel\"
    NomFichier = ws.Range("AE9") & ".pdf"
    Notice = Chemin & NomFichier
    
    Application.Dialogs(xlDialogPrinterSetup).Show
    
    ShellExecute FindWindow("XLMAIN", Application.Caption), "print", Notice, "", "", 1
    
Else
End If

Application.DisplayAlerts = True

End Sub

Je ne maîtrise pas du tout les macros mais j'ai déjà réussi à faire ça.

Merci d'avance pour votre aide :)
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 17 mars 2019, 15:57

Bonjour Garenne,

Pour un export PDF, et si tu es bien en version 2007, je te propose plutôt que tu charges le complément de microsoft :

https://www.microsoft.com/fr-fr/downloa ... .aspx?id=7

Tu gagneras en simplicité...
Cordialement,

Gérard
G
Garenne
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 13 mars 2019
Version d'Excel : 2007

Message par Garenne » 18 mars 2019, 08:39

Bonjour,

merci pour votre réponse mais je ne cherche pas à exporter mon fichier en PFD mais à imprimer des fichiers PDF déjà présent sur le serveur grâce à une liste excel.

En gros j'ai sur une feuille excel une liste de nom (chaque nom correspond à un chapitre de notice de montage) qui se met à jour en fonction d'option choisi précédemment dans le tableau excel. une fois cette liste à jour, je souhaite imprimer la notice de montage complète (donc chacun des chapitre utile), en sachant quelle peut-être imprimer depuis plusieurs poste différent.

J'ai également trouvé la macro suivante mais je n'arrive pas a trouver la bonne codification pour 'définir l'imprimante voulu par défaut
 '--------------------------------------------------------------------------------
   'Trouver le nom de l'imprimante voulu en fonction du nom de l'ordinateur
   '--------------------------------------------------------------------------------
            Dim Nom_du_PC As String
            Nom_du_PC = Environ$("computername")
            Dim Imprimante_voulu As String
       		   'Imprimante voulu associée à "COMPUTERNAME"
	                Select Case [Nom_du_PC]
	            Case "PC-DAO"
	                Imprimante_voulu = "Copieur couleur"
	            Case "ASSISTANTE-COMM"
	                Imprimante_voulu = "Copieur-Fax"
	            End Select
'---------------------------------------------------------------------------------------
'  Basculer l'imprimante par défaut à l'imprimante voulu et retour après impression
'---------------------------------------------------------------------------------------

        Dim Imprimant_origine As String
        Imprimant_origine = Application.ActivePrinter 'Obtenir l'imprimante par défaut
        Set Application.Printer = "Imprimante_voulu"  'Définir l'imprimante voulu par défaut


Si quelqu'un a une solution ou une autre idée je suis preneur ^^'
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 816
Appréciations reçues : 73
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 18 mars 2019, 13:25

Bonjour Garenne,

J'ai répondu un peu rapidement, en effet,...

Je regarde mieux et te donne des nouvelles ASAP.
Cordialement,

Gérard
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'503
Appréciations reçues : 123
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 18 mars 2019, 13:38

il faut voir le nom de ton imprimente, par exemple si elle est locale:
 Set Application.ActivePrinter = "HP4650" 'Imprimente locale HP 4650
ou bien réseau
Set Application.ActivePrinter = "\\HP5000\10.21.13.44" 'imprimente réseau
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'481
Appréciations reçues : 209
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 mars 2019, 15:20

Bonjour,

Le problème est que tu n'imprimes pas ton PDF à partir de l'application Excel mais à partir de l'application PDF(Adode Acrobat Reader ou autre) appelée par l'instruction :
ShellExecute FindWindow("XLMAIN", Application.Caption), "print", Notice, "", "", 1
Tout paramétrage de l'imprimante Excel ne servira donc strictement à rien.

Une solution simple pourrait être d'ouvrir le PDF via l'application Word et d'y paramétrer l'imprimante.

Une autre solution est d'utiliser le contrôle ActiveX Adobe Reader : "AcroPDF" sous réserve d'être en Excel 32 bits.
1 membre du forum aime ce message.
G
Garenne
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 13 mars 2019
Version d'Excel : 2007

Message par Garenne » 18 mars 2019, 15:33

GVIALLES a écrit :
18 mars 2019, 13:25
Bonjour Garenne,

J'ai répondu un peu rapidement, en effet,...

Je regarde mieux et te donne des nouvelles ASAP.
Pas de soucis ;)
m3ellem1 a écrit :
18 mars 2019, 13:38
il faut voir le nom de ton imprimente, par exemple si elle est locale:
 Set Application.ActivePrinter = "HP4650" 'Imprimente locale HP 4650
ou bien réseau
Set Application.ActivePrinter = "\\HP5000\10.21.13.44" 'imprimente réseau
J'ai essayé plus fois avec différente imprimante (réseau et local) avec différente façon de faire que j'ai pu voir sur la toile (avec Set et sans Set) mais j'ai toujours un message d'erreur qui s'affiche:

Avec Set :
Erreur de compilation: Utilisation incorrecte de la propriété (avec ".ActivePrinter =" de surligné en jaune)

Sans Set :
Erreur d'exécution '1004': La méthode 'ActivePrinter' de l'objet '_Application' a échoué

J'ai donc essayé avec Option Explicit mais du coup c'est FindWindow qui pose problème :/

Il d'oit y avoir une subtilité que je n'ai pas saisi
G
Garenne
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 13 mars 2019
Version d'Excel : 2007

Message par Garenne » 18 mars 2019, 15:46

thev a écrit :
18 mars 2019, 15:20
Bonjour,

Le problème est que tu n'imprimes pas ton PDF à partir de l'application Excel mais à partir de l'application PDF(Adode Acrobat Reader ou autre) appelée par l'instruction :
ShellExecute FindWindow("XLMAIN", Application.Caption), "print", Notice, "", "", 1
Tout paramétrage de l'imprimante Excel ne servira donc strictement à rien.

Une solution simple pourrait être d'ouvrir le PDF via l'application Word et d'y paramétrer l'imprimante.

Une autre solution est d'utiliser le contrôle ActiveX Adobe Reader : "AcroPDF" sous réserve d'être en Excel 32 bits.
Ça répond à la question que je viens juste de poser ^^' du coup je suis bien en 32 bits mais je ne connait pas du tout le contrôle ActiveX adobe Reader. Je regarde et si je ne trouve pas je te redemanderai.

Merci en tout cas.
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'481
Appréciations reçues : 209
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 mars 2019, 15:59

Bonjour,

Si vous voulez utiliser l'ActiveX Adobe,: AcroPDF le plus simple est de le créer dans la feuille de votre choix.
Exemple de code à placer dans une feuille:
Sub créa_contrôle_PDF()
    'création du contrôle
    Set pdf = Me.OLEObjects.Add(ClassType:="AcroPDF.PDF.1", Link:=False, DisplayAsIcon:=True, Left:=40, Top:=40, Width:=40, Height:=40)
    'assignation du contrôle
    Set AcroPDF1 = pdf.Object
    'chargement du fichier associé au contrôle
    AcroPDF1.LoadFile (notice)
    'impression du fichier avec boîte de dialogue
    AcroPDF1.printWithDialog
End Sub
Nb: La dernière instruction d'impression avec boîte de dialogue ne fonctionne pas sur ma version 64 bits mais elle devrait fonctionner sur votre fonction 32 bits.
1 membre du forum aime ce message.
G
Garenne
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 13 mars 2019
Version d'Excel : 2007

Message par Garenne » 18 mars 2019, 16:43

Merci pour ton tuyau parce que là j'ai strictement rien compris à ce que j'ai trouvé pour l'instant :( :(

J'ai intégré ton code mais ça me met une erreur sur le "Me" de "pdf = Me.OLEObjects.Add"

Ensuite, si j'ai bien interprété la fin du code, il faudra que je charge tout mes fichiers avec d'ouvrir la boite de dialogue sinon il faudra que je fasse intervenir la boite de dialogue pour chaque fichier, c'est bien ça?
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message