macro excel impression PDF

casamartin

XLDnaute Junior
Bonjour à tous,
J'ai pompé une macro sur le forum pour imprimer en PDF.
Elle fonctionne mais j'ai des modifications à y faire.
Cette macro imprime l'ensemble des feuilles du classeur, je veux imprimer que la feuille ou se trouve le bouton de commande macro.
De plus cette macro intègre le chemin dans le nom du fichier, je veux que le nom du fichier.
Merci d'avance pour vos lumières.

Sub ToPdf()

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Dim nomPdf As String
Range("M1").Select
nomPdf = ThisWorkbook.Path & "\" & ActiveCell.Text & ".pdf"
With pdfjob
If .cstart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = ThisWorkbook.Path
.cOption("AutosaveFilename") = nomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ThisWorkbook.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultprinter = DefaultPrinter
.cClearCache
.cClose
End With
Set pdfjob = Nothing
End Sub
 

kiki29

XLDnaute Barbatruc
Re : macro excel impression PDF

Salut,3 possibilités ( il y en a d'autres )
Code:
    ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

Code:
    ShDatas.PrintOut copies:=1, ActivePrinter:="PDFCreator"
ou ShDatas est le CodeName de la feuille à imprimer

Code:
    Sheets("Feuil2").PrintOut copies:=1, ActivePrinter:="PDFCreator"
ou Feuil2 est le nom d'onglet de la feuille à imprimer
 
Dernière édition:

casamartin

XLDnaute Junior
Re : macro excel impression PDF

Bonjour Kiki,
Merci de m'avoir répondu, c'est simple mais pas suffisant.
Cela ne répond pas tout à fait à ce que je veux.

Je génère dans une cellule, avec un compteur le nom de sauvegarde du fichier PDF.
je veux en cliquant sur un bouton dans la feuille active sauvegarder le champs d'impression sous ledit nom dans le répertoire courant.
 

casamartin

XLDnaute Junior
Re : macro excel impression PDF

J'ai déjà ce code dans ma macro

Sub ToPdf()

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Dim nomPdf As String
Range("M1").Select
nomPdf = ThisWorkbook.Path & "\" & ActiveCell.Text & ".pdf"
With pdfjob
If .cstart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = ThisWorkbook.Path
.cOption("AutosaveFilename") = nomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator" 'j'ai remplacé Thisworkbook par activesheet, imprime mais nomme pas le fichier
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultprinter = DefaultPrinter
.cClearCache
.cClose
End With
Set pdfjob = Nothing
End Sub
 

Bebere

XLDnaute Barbatruc
Re : macro excel impression PDF

bonjour Casamartin,Kiki
essaye ce code,içi c'est bon

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

Dim CREATION_PDF As PDFCreator.clsPDFCreator
Dim DefaultPrinter As String, NomPdf As String

' SupprimerPDFCreator
DefaultPrinter = Application.ActivePrinter
NomPdf = Range("M1") & ".pdf"
Set CREATION_PDF = New PDFCreator.clsPDFCreator

With CREATION_PDF
'La condition ci-dessous empêche l'ouverture de la boite de dialogue de PDFCreator
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") = ThisWorkbook.Path & "\"
.cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With
'Convertit le document en PDF
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
'Attend que le document soit entré dans la file de Création
Do Until CREATION_PDF.cCountOfPrintjobs = 1
DoEvents
Loop
CREATION_PDF.cPrinterStop = False
'Attend que la Création du document PDF soit terminée
Do Until CREATION_PDF.cCountOfPrintjobs = 0
DoEvents
Loop
CREATION_PDF.cClose
Set CREATION_PDF = Nothing
SupprimerPDFCreator
Application.ActivePrinter = DefaultPrinter
'testPrinter 'ModulePrinterSwitch
End Sub


Sub SupprimerPDFCreator()
'Supprimer le processus dans le Gestionnaire des tâches
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'PDFCreator.exe'")
For Each objProcess In colProcessList
objProcess.Terminate
Next
End Sub

à bientôt
 

kiki29

XLDnaute Barbatruc
Re : macro excel impression PDF

Salut,j'ose espérer que tu n'as pas M1 vide ?
sous PDFCreator 1.2.0 Ghostscript 9.0
Code:
Option Explicit

Sub TstPdfCreator()
Dim JobPDF As Object
Dim sNomPDF As String
Dim sCheminPDF As String

    KillPDFCreator
    DoEvents

    sNomPDF = ActiveSheet.Range("M1") & ".pdf"
    sCheminPDF = ThisWorkbook.Path & "\"

    Set JobPDF = CreateObject("PDFCreator.clsPDFCreator")

    With JobPDF
        If .cStart("/NoProcessingAtStartup") = False Then
            MsgBox "Initialisation de PDFCreator impossible", vbCritical + vbOKOnly, "PDFCreator"
            Exit Sub
        End If
        .cOption("UseAutosave") = 1
        .cOption("UseAutosaveDirectory") = 1
        .cOption("AutosaveDirectory") = sCheminPDF
        .cOption("AutosaveFilename") = sNomPDF
        .cOption("AutosaveFormat") = 0
        .cClearCache
    End With

    ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

    Do Until JobPDF.cCountOfPrintjobs = 1
        DoEvents
    Loop
    JobPDF.cPrinterStop = False

    Do Until JobPDF.cCountOfPrintjobs = 0
        DoEvents
    Loop

    JobPDF.cClose
    Set JobPDF = Nothing

End Sub

Private Sub KillPDFCreator()
Dim RetVal As Long
    RetVal = Shell("Taskkill /im PDFCreator.exe /f", 0)
End Sub
 
Dernière édition:

casamartin

XLDnaute Junior
Re : macro excel impression PDF

Rebonjour à Kiki, bebere et les autres,
j'ai réussi à éliminer tous les défauts suivant un autre modèle qui se rapproche du dernier modèle de Kiki.
mais je voudrais ajouterdans le nom de sauvegarde le nom de l'onglet de la feuille active

Nouvelle macro

Sub ImprPdf()
Dim pdfjob As Object, myprint As String, Port As Integer, fichname As String
Dim txt As String, NomPdf As String, DefaultPrinter As String
For Port = 0 To 9
myprint = "PDFCreator sur Ne0" & Port & ":"
On Error Resume Next
ActivePrinter = myprint
If ActivePrinter = myprint Then
Exit For
End If
Next
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox " PDFCreator n'a pu être démarrer.", vbCritical + vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
End With
NomPdf = ActiveCell.Text & ".pdf"
fichname = ThisWorkbook.Path & "\" & NomPdf
txt = Dir(fichname, vbNormal)
If txt <> "" Then
MsgBox "Ce fichier existe déja"
Exit Sub
End If
With pdfjob
.cOption("UseAutosave") = 1
.cOption("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = (ThisWorkbook.Path)
.cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
DefaultPrinter = .cDefaultprinter
End With
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
With pdfjob
.cDefaultprinter = DefaultPrinter
.cClearCache
.cClose
End With
Set pdfjob = Nothing
MsgBox ("Le nom de votre fichier : " & NomPdf)
End Sub
 

kiki29

XLDnaute Barbatruc

Pièces jointes

  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 166
  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 175
  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 175
Dernière édition:

kiki29

XLDnaute Barbatruc
Re : macro excel impression PDF

re,
Code:
Function ExistenceFichier(sFichier As String) As Boolean
    ExistenceFichier = Dir(sFichier) <> ""
End Function

Code:
Dim Rep As Long
     .....
    sNomPDF = ActiveSheet.Name & "_" & ActiveSheet.Range("M1") & ".pdf"
    If ExistenceFichier(sNomPDF) Then
        Rep = MsgBox("Le fichier existe déjà" & vbCrLf & "L'écraser : ", vbYesNo)
    End If

    If Rep = 7 Then Exit Sub
    .....
Un autre conseil Balise ton code
 

Pièces jointes

  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 141
  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 155
  • Code.jpg
    Code.jpg
    16.3 KB · Affichages: 151
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 240
Messages
2 086 515
Membres
103 239
dernier inscrit
wari