imprimer un fichier pdf depuis Excel

salhi_haithem

XLDnaute Junior
Bonjour a tous

J'ai une macro qui fonctionne bien cette macro elle

=> Contrôle Des Cellules
=> Charge Des Variables depuis une feuille excel
=> Verification Et Constitution d'un Dépôt (répertoire) si il n'existe pas
=> Constitution du Fichier et Le mettre dans Une Variable
=> Contrôle Si Le le fichier existe déjà dans le dépôt
=> Contrôle Si Le le fichier est Ouvert ou en cours d'utilisation
=> Exportation PDF
=> Impression
=> envoie par Mail

le problème c'est que je utilise ce code pour imprimer le fichier PDF


Code:
Option Explicit

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 Valider()

Code ..........................................................

'------------------------------------------
'Exportation PDF
'------------------------------------------
       
    With ActiveSheet
    .ExportAsFixedFormat Type:=xlTypePDF _
    , filename:=Mon_Fichier _
    , Quality:=xlQualityStandard _
    , IncludeDocProperties:=True _
    , IgnorePrintAreas:=False _
    , OpenAfterPublish:=True 'Ouvrir Après Exportation
   End With
   
   
'------------------------------------------
'Impression
'------------------------------------------

Dim NomFichier As String
Dim x As Long
   
    x = FindWindow("XLMAIN", Application.Caption)
    NomFichier = Mon_Fichier & ".pdf"
    ShellExecute x, "print", NomFichier, "", "", 1
    'On ferme les fichiers Acrobat ouverts pour l'impression des plans
   Application.Wait (Now + TimeValue("0:00:10"))
    Shell "TASKKILL /IM AcroRd32.exe /F"


j'aimerai imprimé deux copie PDF comment Faire
est ce possible d'adapté le code suivant dans le code de dessus pour avoir plus d'option


Code:
Application.Wait Now + TimeValue("00:00:01")
   
    With
        'impression centrée dans la page
       .PageSetup.CenterHorizontally = True
        .PageSetup.CenterVertically = True
        'impression noir et blanc ou couleur
       .PageSetup.BlackAndWhite = False
        'zoom
       .PageSetup.zoom = 100
        'impression  papier A4
       .PageSetup.PaperSize = xlPaperA4
        'impression portrait (xlportrait) ou paysage (xlLandscape)
       .PageSetup.orientation = xlPortrait
        .PrintOut Copies:=1
        '.PrintOut From:=1, To:=1
       
    End With

Merci d'avance
 

david84

XLDnaute Barbatruc
Re : imprimer un fichier pdf depuis Excel

Bonjour,

as-tu simplement essayé de répéter une deuxième fois la partie
Code:
ShellExecute x, "print", NomFichier, "", "", 1
séparé par un Wait si besoin ?
Il devrait te refaire une impression du document non ?

A+
 

david84

XLDnaute Barbatruc
Re : imprimer un fichier pdf depuis Excel

moi c'est la ligne

Code:
.PrintOut Copies:=1

qui me saute aux yeux, apres je connais pas trop

Apparemment non car si j'ai bien compris cette partie-là ne fait pas partie du code initial et il veut savoir s'il y a moyen, en plus de la 2ème impression, d'avoir plus d'option comme lorsque l'on imprime une feuille Excel (d'où son exemple).
Mais là on parle d'un pdf, pas d'un objet de type feuille de calcul ou classeur.
Je pense que c'est possible si l'on a Acrobat Reader (je ne parle pas d'Adobe reader ou d'Adobe Acrobat Reader DC) mais comme je ne l'ai pas je ne peux tester.

A+
 

kiki29

XLDnaute Barbatruc
Re : imprimer un fichier pdf depuis Excel

Salut, cela n'a aucun sens d'imprimer en x exemplaires en pdf, si tu veux x exemplaires il te faut x noms différents, et adapter la procédure en question pour faire cela.

Une procédure à intégrer dans ton code qui permet de générer des fichiers de même nom initial sans doublons.

Code:
        ' on teste si doublon
        sNouveauNom = RenommerFichier(sCheminPdf, sOut)

Private Function RenommerFichier(sCheminPdf As String, sNomFichier As String) As String
Dim sNouveauNom As String
Dim sPre As String
Dim sExt As String
Dim iExt As Long
Dim i As Long, Pos As Long
Dim FSO As Object

    Set FSO = CreateObject("Scripting.FileSystemObject")
    If FSO.fileExists(sCheminPdf & "\" & sNomFichier) = True Then
        sNouveauNom = sNomFichier
        Pos = InStrRev(sNomFichier, ".")
        iExt = Len(sNomFichier) - Pos + 1
        If Pos > 0 Then
            ' ici ".pdf"
            sExt = Right$(sNomFichier, iExt)
            sPre = Left$(sNomFichier, Len(sNomFichier) - iExt)
        Else
            sExt = ""
            sPre = sNomFichier
        End If

        i = 0
        While FSO.fileExists(sCheminPdf & "\" & sNouveauNom) = True
            i = i + 1
            '   sPre.sExt
            '   càd zaza.pdf zaza(1).pdf zaza(2).pdf etc
            sNouveauNom = sPre & Chr(40) & Format(i, "000") & Chr(41) & sExt
        Wend
        sNomFichier = sNouveauNom
    End If
    Set FSO = Nothing
    RenommerFichier = sCheminPdf & "\" & sNomFichier
End Function
 

Pièces jointes

  • 1.png
    1.png
    19.2 KB · Affichages: 80
  • 1.png
    1.png
    19.2 KB · Affichages: 81
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 306
Membres
102 859
dernier inscrit
Diallokass