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
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'534
Appréciations reçues : 213
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 18 mars 2019, 17:03

Garenne a écrit :
18 mars 2019, 16:43
J'ai intégré ton code mais ça me met une erreur sur le "Me" de "pdf = Me.OLEObjects.Add"
Me représente la feuille.
Si tu as une erreur, cela veut dire que tu n'as pas placé le code dans la feuille mais dans un module. Alors, il faut remplacer Me par Sheets(nom_feuille).
Garenne a écrit :
18 mars 2019, 16:43
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?
Tu ne peux charger qu'un fichier à la fois. Maintenant il est possible que le changement d'imprimante ne doive être effectué qu'une seule fois.
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 » 19 mars 2019, 09:15

Ca fait exactement ce que je souhaitai :wink: par contre ça n'as marché qu'une fois :lole: :lole:

A chaque fois que je lance la macro ça me créer un objet AcroPDF1 puis AcroPDF2 etc... j'ai réussi a les supprimer mais malgrès ça le fichier se charge mais la boite de dialogue ne s'ouvre pas.
Si je lance la macro et qu'ensuite j'active le mode création puis le désactive, la boite de dialogue s'affiche.

Par contre je ne sais plus si j'avais réussi avec le bonton activeX ou avec le bouton normal.
Sub PrintTest2()

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("AF10") & ".pdf"
    Notice = Chemin & NomFichier
    
    'création du contrôle
    Set pdf = Sheets("Notice de montage").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
    
Else

End If

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

Message par Garenne » 19 mars 2019, 10:11

C'est bon j'ai rajouté un changement de feuille puis une retour sur la feuille de lancement de macro et ça fonctionne :)
Le seul bémol c'est qu'il faut sélectionner l'imprimante pour chaque document mais ça reste acceptable pour ce qu'il y a à faire.
Je te remercie grandement car j'aurai jamais réussi à faire ça tout seul :)

Je partage le code complet si ça peut servir à quelqu'un

Encore merci et bonne continuation :)
'Début de la macro
Private Sub CommandButton1_Click()

'Message pour confirmer ou non la volonté d'imprimer la notice de montage
If MsgBox("Êtes-vous sûr de vouloir imprimer les notices de montage?", vbQuestion + vbYesNo, "Impression des notices de montage") = vbYes Then
'Si vous acceptez l'impression

    'Definition de la feuille avec les données à utiliser
    Dim ws As Worksheet
    Set ws = Sheets("Notice de montage")

    'Definition du chemin sur le serveur à utiliser
    Dim Chemin As String
    Chemin = "\\SRV-SVL\Production\BE\Etude\Tunnel\Notice tunnel\"

    'Definition du nom du premier fichier à utiliser
    Dim NomFichier1 As String
    NomFichier1 = ws.Range("AF10") & ".pdf"
    'Definition du nom complet du premier fichier à utiliser
    Dim Notice1 As String
    Notice1 = Chemin & NomFichier1
    
    'Definition du nom du second fichier à utiliser
    Dim NomFichier2 As String
    NomFichier2 = ws.Range("AF11") & ".pdf"
    'Definition du nom complet du second fichier à utiliser
    Dim Notice2 As String
    Notice2 = Chemin & NomFichier2
    
    '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 premier fichier
    AcroPDF1.LoadFile (Notice1)
    'Ouverture de la boite de dialogue pour l'impression du premier fichier (en réaliter l'ouverture se fera après les changements de feuille mais je ne sais pas pourquoi)
    AcroPDF1.printWithDialog
    
    '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 AcroPDF2 = pdf.Object
    'chargement du second fichier
    AcroPDF2.LoadFile (Notice2)
    'Ouverture de la boite de dialogue pour l'impression du second fichier (idem que pour le premier fichier)
    AcroPDF2.printWithDialog
    
    'Changement de feuille puis retour sur la feuille en cours pour provoquer l'ouverture de la boite de dialogue
    Sheets("Notice de montage").Select    'Peux importe la feuille tant que ce n'est pas celle sur laquelle vous avez lancé la macro
    Sheets("Fiche de renseignement").Select    'Feuille sur laquelle j'ai lancé la macro
    
'Fin de la fonction d'acceptation de l'impression
Else
'Si vous refusez l'impression
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'534
Appréciations reçues : 213
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 19 mars 2019, 11:56

Super qu'au final tu aies réussi à faire bien fonctionner ce contrôle ActiveX.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message