Créer un PDF et l'imprimer

bloomby

XLDnaute Occasionnel
Bonjour à tous,

j'ai trouvé un fil interessant qui répond à ces deux questions

https://www.excel-downloads.com/threads/edition-pdf.112586/

Par contre, malgré le fait que j'ai installer PDFCreator,
je suis incapable de créer un PDF

J'aimerais dans un premier temps séparer le projet en 2 macros

soit l'une qui ne fait que créer un PDF
et l'autre, Créer un PDFet l'imprime

si quelqu'un aurait une piste de solution je serais preneur
merci

Code:
Sub PrintTest()
    Call PrintSheetInPDF(Worksheets("Sheet1"))
End Sub '~PrintTest

Sub PrintSheetInPDF(shSheet As Worksheet)
    Dim pdfjob      As Object
    Dim sPDFName    As String
    Dim sPDFPath    As String
    
    '/// Changer le nom du fichier de sortie sur la ligne ci dessous: ///
    sPDFName = ThisWorkbook.Name & "_" & shSheet.Name & ".pdf"
    sPDFPath = ThisWorkbook.Path
    'Check if worksheet is empty and exit if so
    
    shSheet.Select
    
    If IsEmpty(shSheet.UsedRange) Then Exit Sub
    
    ' ##############################
    ' Pas trés propre, mais je n'ai pas réussi à récupérer l'instance de la classe
    ' PDFCreator.clsPDFCreator avec la fonction GetObject
    ' Remarque : si la tache "PDFCreator.exe" n'existe pas, la fonction KillTask("PDFCreator.exe") ne fait rien
    Call KillTask("PDFCreator.exe")
    ' ##############################
 
    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

    With pdfjob
        If .cStart("/NoProcessingAtStartup") = False Then
            MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
            Exit Sub
        End If
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = sPDFPath
        .cOption("AutosaveFilename") = sPDFName
        .cOption("AutosaveFormat") = 0 ' 0 = PDF
        .cClearCache
    End With
    'Imprime le document en PDF
    ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
    'Attend que le document soit entré dans la file d'impression
    Do Until pdfjob.cCountOfPrintjobs = 1
        DoEvents
    Loop
    pdfjob.cPrinterStop = False
    'Attend que l'impression du document soit terminée
    Do Until pdfjob.cCountOfPrintjobs = 0
        DoEvents
    Loop

    With pdfjob
        .cDefaultPrinter = DefaultPrinter
        .cClearCache
        Application.Wait (Now + TimeValue("0:00:3"))
        .cClose
    End With
    
    Set pdfjob = Nothing
End Sub '~PrintSheetInPDF


Sub KillTask(sAppName As String)
    Dim oProcList   As Object
    Dim oWMI        As Object
    Dim oProc       As Object
    
    'Create WMI object instance:
    Set oWMI = GetObject("winmgmts:")
    If IsNull(oWMI) = False Then
        'Create object collection of Win32 processes:
        Set oProcList = oWMI.InstancesOf("win32_process")
        'Iterate through the enumerated collection:
        For Each oProc In oProcList
            If UCase(oProc.Name) = UCase(sAppName) Then
                oProc.Terminate (0)
            End If
        Next oProc
    Else
        'Report Error
        MsgBox "Killing """ & sAppName & """ - Can't create WMI Object.", vbOKOnly + vbCritical, "CloseAPP_B"
    End If
    
    'Clear out the objects:
    Set oProcList = Nothing
    Set oWMI = Nothing
End Sub '~KillTask
 

kinel

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

bonjour à tous

j'utilise ça si ça peut vous être utile

Sub editer()
Dim Variable_Imp As String
Variable_Imp = Application.ActivePrinter 'mise en memoire de l'imprimante par defaut
Application.ActivePrinter = "pdf sur Ne00:" 'parametrer la nouvelle imprimante à utiliser pour créer le pdf
ActiveSheet.PrintOut 'imprimer le pdf
Application.ActivePrinter = Variable_Imp ' reinitialiser l'imprimante pas défaut et imprimer sur papier le même document
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End sub



en paramétrant le pdf creator vous pouvez stocker les pdf dans un dossier spécifique avec incrémentation
voili voilà

bien cordialement
Kinel
 
Dernière édition:

bloomby

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

Bonjour fil, bonjour nat54 et kinel

nat54,
la macro tel quel en haut,
me permet d'imprimer, sans créer de userform et sans sélectionner la page à imprimer.

Kinel,
Dans ta macros quel est la partie du code qui permet de créer le PDF ?

merci
 
Dernière édition:

kinel

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

bonjour à tous

voici la partie qui génère le pdf
-----------------------
Application.ActivePrinter = "pdf sur Ne00:" 'parametrer la nouvelle imprimante à utiliser pour créer le pdf
ActiveSheet.PrintOut 'imprimer le pdf
-----------------------

le "pdf sur Ne00:" est à paramétrer selon le nom du programme qui génère le pdf et le numéro affecté par windows. en cas d'erreur il suffit de mettre l'imprimante pdf par défaut puis de retourner dans le code vba. en plaçant la souris sur Application.ActivePrinter une fenêtre indique les coordonnées de l'imprimante

bonne journée

Kinel:)
 

bloomby

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

Bonjour à tous,
Je vais essayer cette méthode dans quelsque instant,

j'aimerais savoir s'il serait possible de choisir quel pages imprimer
pour ma part c'est p-e même un peu plus compliquer car
c'est la première page de mes 5 onglets

merci
 

kinel

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

c'est simple

tu paramètres ta zone d'impression sur la feuille concernée
puis tu places un bouton ou un dessin sur lequel tu affectes la macro editer

ensuite tu lances
il faut pas oublier de paramétrer le pdf créator pour lui dire la forme et la localisation du pdf généré

kinel
 

bloomby

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

Bonjour Kinel,

La macro s'arrette à cette partie du code:

Application.ActivePrinter = "PDFCreator:" 'parametrer la nouvelle imprimante à utiliser pour créer le pdf

j'ai inscrit "PDFCreator:" étant donnée que c'est le nom de l'imprimante qui créer le PDF

merci
 

bloomby

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

Bonjour Kinel,

malheuresement sans succèes,
je vais peut-être chercher une autre méthode
pcq je ne trouve pas dans les option ou est- ce que je peu le configurer

De plus, lorsque j'essaie de créer un PDF avec addin-Excel j'ai une erreur interne :(

si tu as de nouvelle piste n'hésite pas,
pour ma part je vais continuer à chercher,

merci
 

kinel

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

essaye ça :

en cas d'erreur il suffit de mettre l'imprimante pdf par défaut puis de retourner dans le code vba. en plaçant la souris sur Application.ActivePrinter une fenêtre indique les coordonnées de l'imprimante

tu auras ainsi la bonne configuration

"PDFCreator sur NeXX:"
 

nat54

XLDnaute Barbatruc
Re : Créer un PDF et l'imprimer

Bonjour le fil,

Moi ça marche avec le code ci dessous
Code:
Sub editer()
Dim Variable_Imp As String
Variable_Imp = Application.ActivePrinter 'mise en memoire de l'imprimante par defaut
Application.ActivePrinter = "PDFCreator sur Ne00:" 'parametrer la nouvelle imprimante à utiliser pour créer le pdf
ActiveSheet.PrintOut 'imprimer le pdf
Application.ActivePrinter = Variable_Imp ' reinitialiser l'imprimante pas défaut et imprimer sur papier le même document
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Cependant est-ce possible (car là finalement ça ne sert pas à grand-chose car en faisant fichier-imprimer-pdfcreator) j'obtiens pareil
de rajouter un moyen (un userform peut-être ?!) de sélectionner les onglets excel à transformer en pdf ?
ce serait géniallissime :cool:
 

kinel

XLDnaute Occasionnel
Re : Créer un PDF et l'imprimer

oui je pense qu'en ajoutant

Sheets(Array("Feuil3", "Feuil2", "Feuil1")).Select

avant la ligne
ActiveSheet.PrintOut 'imprimer le pdf
ainsi qu'avant la ligne
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

ça devrait correspondre à vos désirs

il faut bien sur définir la zone d'impression de chaque feuille avant
vous aurez donc dans le cas de l'exemple une impression papier et pdf des zones d'impression de la feuille 1 2 et 3
il doit y avoir un chemin plus court sans le select mais je n'ai pas le niveau (on fait avec ses petits moyens !!!)
dites moi si ça marche

Kinel
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
240
Réponses
0
Affichages
153

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 332
Membres
103 188
dernier inscrit
evebar