Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Créer un PDF de certain onglet d'excel

13 réponses
Avatar
PAT0051
Bonjour =E0 tous,

=C2pres de nombreuse recherche et test, je n' arrive =E0 rien de
satisfaisant ( ou plut=F4t, je n'arrive pas =E0 comprendre toutes les
subtilit=E9s des macros pour les adapter ).
Je souhaite imprimer certains onglets d'un classeur excel en PDF et
les envoyer par mail avec thunderbird.
Pouvez-vous m'aider.

merci d'avance

10 réponses

1 2
Avatar
MichD
Bonjour,

Quelle est ta version d'Excel ?
Avatar
PAT0051
On 1 juin, 20:39, "MichD" wrote:
Bonjour,

Quelle est ta version d'Excel ?



2007
Avatar
MichD
Pour imprimer au format PDF,

Tu peux télécharger un utilitaire gratuit : "PdfCreator"
ici : http://sourceforge.net/projects/pdfcreator/files/latest/download

Lorsqu'il est installé,
regarde ce classeur d'Isabelle : http://cjoint.com/?BFbvGpIkSBa
tu as plusieurs façons d'écrire le code selon que tu veuilles imprimer
une ou des feuilles dans un fichier PDF

Pour l'envoi des fichiers par courriel utilisant Thunderbird,
désolé je n'utilise pas ce logiciel.
Avatar
PAT0051
Le vendredi 1 juin 2012 21:42:32 UTC+2, MichD a écrit :
Pour imprimer au format PDF,

Tu peux télécharger un utilitaire gratuit : "PdfCreator"
ici : http://sourceforge.net/projects/pdfcreator/files/latest/download

Lorsqu'il est installé,
regarde ce classeur d'Isabelle : http://cjoint.com/?BFbvGpIkSBa
tu as plusieurs façons d'écrire le code selon que tu veuilles imprime r
une ou des feuilles dans un fichier PDF

Pour l'envoi des fichiers par courriel utilisant Thunderbird,
désolé je n'utilise pas ce logiciel.



Merci, je teste immediatement
Avatar
PAT0051
Le vendredi 1 juin 2012 21:42:32 UTC+2, MichD a écrit :
Pour imprimer au format PDF,

Tu peux télécharger un utilitaire gratuit : "PdfCreator"
ici : http://sourceforge.net/projects/pdfcreator/files/latest/download

Lorsqu'il est installé,
regarde ce classeur d'Isabelle : http://cjoint.com/?BFbvGpIkSBa
tu as plusieurs façons d'écrire le code selon que tu veuilles imprime r
une ou des feuilles dans un fichier PDF

Pour l'envoi des fichiers par courriel utilisant Thunderbird,
désolé je n'utilise pas ce logiciel.



Les tests sont bons, j'ai modifié la macro pour imprimer deux onglets au choix.
Mais juste un petit problème. Les deux onglets sont convertis en PDF dans le même fichier, j'ai besoin d'avoir la conversion des deux onglets dans deux fichiers différents......je poursuis les tests
Avatar
MichD
Copie ce qui suit dans un module standard, la procédure
va créer un fichier PDF par feuille sélectionnée.


Dans la procédure test, au lieu de cette ligne de code
Sheets.Select 'Sélectionne toutes les feuilles du fichier

Remplace par :
Sheets(Array("Feuil1","Feuil3").Select 'Sélectionne les feuilles désirées

Pour l'envoi du fichier par courriel, si tu veux envoyer les fichiers pdf par CDO
au lieu de Tunderbird, regarde à cette adresse, beaucoup de suggestion :
http://www.rondebruin.nl/cdo.htm#Tips ou cette adresse :
http://www.rondebruin.nl/sendmail.htm



Option Explicit
'Selon la puissance de l'ordinateur et l'importance de la tâche
'à réaliser, on peut être appelé à modifier cette valeur
Const Délai = 2.5

'------------------------------------------------------
Sub test()

'Un fichier PDF est créé pour chaque feuille sélectionnée
'Le nom des fichiers créé correspond au nom des feuilles du classeur

Dim Répertoire As String
Dim Creation As Boolean
'Où tu veux avoir tes fichiers PDF , à adapter
Répertoire = "C:MonCheminMes Fichiers PDF"
Sheets.Select 'Sélectionne toutes les feuilles du fichier
'Créer un fichier pdf pour chacune des feuilles du fichier
Call Créer_Un_Fichier_PDF(Répertoire, True)

End Sub
'------------------------------------------------------
Sub Créer_Un_Fichier_PDF(Répertoire As String, _
Creation As Boolean)

Dim pdfjob As Object, NbJobs As Integer
Dim Default_Printer As String, Sh As Object

killtask ("PDFCreator.exe") 'Procédure écrite plus bas...

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
'Make sure the PDF printer can start
If pdfjob.cstart("/NoProcessingAtStartup") = False Then
MsgBox "Imposssible d'initialiser PDFCreator.", vbCritical + _
vbOKOnly, "Erreur!"
Exit Sub
End If

For Each Sh In ActiveWindow.SelectedSheets
With pdfjob
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = Répertoire
.cOption("AutosaveFilename") = Sh.Name & ".pdf"
.cOption("AutosaveFormat") = 0
.cClearCache
End With
Application.ScreenUpdating = False
Default_Printer = Application.ActivePrinter
'Imprime la feuille sélectionnée
Sh.PrintOut copies:=1, ActivePrinter:="PDFCreator"
Attente Délai

'Wait until all print jobs have entered the print queue
NbJobs = pdfjob.cCountOfPrintjobs
If NbJobs > 0 Then
Creation = True
Do Until pdfjob.cCountOfPrintjobs = NbJobs
DoEvents
Loop
'Combine all PDFs into a single file and stop the printer
With pdfjob
.ccombineall
.cPrinterStop = False
End With

'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
End If
Next
pdfjob.cClose
Application.ScreenUpdating = True
Application.ActivePrinter = Default_Printer
Set pdfjob = Nothing
End Sub
'------------------------------------------------------
Sub killtask(sappname As String)
Dim oProclist As Object
Dim oWMI As Object
Dim oProc As Object
Set oWMI = GetObject("winmgmts:")
If IsNull(oWMI) = False Then
Set oProclist = oWMI.InstancesOf("win32_process")
For Each oProc In oProclist
If UCase(oProc.Name) = UCase(sappname) Then
oProc.Terminate (0)
End If
Next oProc
Else
MsgBox "Killing """ & sappname & _
""" - Can't create WMI Object.", _
vbOKOnly + vbCritical, "CloseAPP_B"
End If
Set oProclist = Nothing
Set oWMI = Nothing
End Sub
'------------------------------------------------------
Function Attente(x As Double)
Dim T As Double
T = Timer + x
Do While Timer <= T
DoEvents
Loop
End Function
'------------------------------------------------------






MichD
---------------------------------------------------------------
"PAT0051" a écrit dans le message de groupe de discussion :


Le vendredi 1 juin 2012 21:42:32 UTC+2, MichD a écrit :
Pour imprimer au format PDF,

Tu peux télécharger un utilitaire gratuit : "PdfCreator"
ici : http://sourceforge.net/projects/pdfcreator/files/latest/download

Lorsqu'il est installé,
regarde ce classeur d'Isabelle : http://cjoint.com/?BFbvGpIkSBa
tu as plusieurs façons d'écrire le code selon que tu veuilles imprimer
une ou des feuilles dans un fichier PDF

Pour l'envoi des fichiers par courriel utilisant Thunderbird,
désolé je n'utilise pas ce logiciel.



Les tests sont bons, j'ai modifié la macro pour imprimer deux onglets au choix.
Mais juste un petit problème. Les deux onglets sont convertis en PDF dans le même fichier,
j'ai besoin d'avoir la conversion des deux onglets dans deux fichiers différents......je
poursuis les tests
Avatar
HD
Bonjour,

Je viens de tester cette intéressante macro mais... pour mon cas, cela
fonctionne bien pour la génération d'un PDF d'une seule feuille. Mais dès
que je lance la génération d'un PDF pour plusieurs feuilles Excel ou pour le
classeur entier j'ai alors un PDF de crée mais qui ne contient que la
dernière feuille Excel. Chaque feuille s'imprime successivement et va
écraser le fichier PDF précédent.

@+
HD
Avatar
HD
Je viens de tester cette intéressante macro mais... pour mon cas, cela
fonctionne bien pour la génération d'un PDF d'une seule feuille. Mais dès
que je lance la génération d'un PDF pour plusieurs feuilles Excel ou pour
le classeur entier j'ai alors un PDF de crée mais qui ne contient que la
dernière feuille Excel. Chaque feuille s'imprime successivement et va
écraser le fichier PDF précédent.


Via PDFCreator, avec ma version Excel 2007, j'ai toujours le souci de
génération de feuille PDF qui s'écrase les unes après les autres. Bug ?
Problème de paramétrage (dans ce cas, je n'ai pas trouvé où se situe le
problème) ?

Par contre, j'ai trouvé une autre possibilité de génération de PDF via Excel
2007... qui ne pose pas de souci chez moi:

Sub PDF_du_classeur()
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
"C:PDFmonPDF.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True,
IgnorePrintAreas:úlse, _
OpenAfterPublish:=True
End Sub

Sub PDF_MesFeuilles_selectionnees()
Sheets(Array("Feuil1", "Feuil2")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=
"C:PDFmonPDF.pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True,
IgnorePrintAreas:úlse, _
OpenAfterPublish:=True
End Sub

Avec Excel 2007 et supérieur, nul besoin d'installer PDFCreator... et il ne
semble pas y avoir de bug.

@+
HD
Avatar
PAT0051
Le vendredi 1 juin 2012 19:04:57 UTC+2, PAT0051 a écrit :
Bonjour à tous,

Âpres de nombreuse recherche et test, je n' arrive à rien de
satisfaisant ( ou plutôt, je n'arrive pas à comprendre toutes les
subtilités des macros pour les adapter ).
Je souhaite imprimer certains onglets d'un classeur excel en PDF et
les envoyer par mail avec thunderbird.
Pouvez-vous m'aider.

merci d'avance



Bonjour à tous,

J'ai travaillé un peut les macros proposés pour arrivé à celle-ci q ui fonctionne

Sub printtest_1()

A = ActiveSheet.Name
B = Range("G5")
Call printsheetinpdf1(Sheets(Array(A)))
Call printsheetinpdf2(Sheets(Array(B)))

End Sub

Sub printsheetinpdf1(shsheet As Object)
Dim pdfjob As Object
Dim spdfname As String
Dim spdfpath As String
spdfname = Range("O1") & ".pdf"
spdfpath = "c:mesdocuments"
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("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = spdfpath
.cOption("AutosaveFilename") = spdfname
.cOption("AutosaveFormat") = 0
.cClearCache
End With
shsheet.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

Sub printsheetinpdf2(shsheet As Object)
Dim pdfjob As Object
Dim spdfname As String
Dim spdfpath As String
spdfname = Range("O2") & ".pdf"
spdfpath = "c:mesdocuments"
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("UseAutisaveDirectory") = 1
.cOption("AutosaveDirectory") = spdfpath
.cOption("AutosaveFilename") = spdfname
.cOption("AutosaveFormat") = 0
.cClearCache
End With
shsheet.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

Mais cette macro n'est valable que pour deux PDF, pour plus, il faut adapte r la macro.
je vais essayé ta macro MichD, elle parait plus adapté.
Avatar
PAT0051
Le vendredi 1 juin 2012 19:04:57 UTC+2, PAT0051 a écrit :
Bonjour à tous,

Âpres de nombreuse recherche et test, je n' arrive à rien de
satisfaisant ( ou plutôt, je n'arrive pas à comprendre toutes les
subtilités des macros pour les adapter ).
Je souhaite imprimer certains onglets d'un classeur excel en PDF et
les envoyer par mail avec thunderbird.
Pouvez-vous m'aider.

merci d'avance



Ma macro est presque terminé, mais je ne trouve pas comment joindre à m on mail mes deux fichiers PDF créés........

Sub printtest_6()

Dim MailAd, Msg, Msg1, Msg2, Msg3, Subj, URLto As String
Dim Répertoire As String
Dim Creation As Boolean
A = ActiveSheet.Name
B = Range("G5")
Répertoire = "C:MonCheminMes Fichiers PDF"
Sheets(Array(A, B)).Select
Call Créer_Un_Fichier_PDF(Répertoire, True)
Subj = Range("c3")
Msg = "blablablablabla."
Msg1 = "Cordialement"
Msg2 = "PAT0051"
Msg3 = " "
URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & Msg & "&body=" & Msg3 & "&body=" & Msg1 & "&body=" & Msg2
ActiveWorkbook.FollowHyperlink Address:=URLto

End Sub

Sub Créer_Un_Fichier_PDF(Répertoire As String, _
Creation As Boolean)

Dim pdfjob As Object, NbJobs As Integer
Dim Default_Printer As String, Sh As Object
killtask ("PDFCreator.exe")
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
If pdfjob.cstart("/NoProcessingAtStartup") = False Then
MsgBox "Imposssible d'initialiser PDFCreator.", vbCritical + vbOKOnly, "Erreur!"
Exit Sub
End If

For Each Sh In ActiveWindow.SelectedSheets
With pdfjob
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = Répertoire
.cOption("AutosaveFilename") = Sh.Name & ".pdf"
.cOption("AutosaveFormat") = 0
.cClearCache
End With
Application.ScreenUpdating = False
Default_Printer = Application.ActivePrinter
Sh.PrintOut copies:=1, ActivePrinter:="PDFCreator"
Attente 1.5 'Valeur à paramétré

NbJobs = pdfjob.cCountOfPrintjobs
If NbJobs > 0 Then
Creation = True
Do Until pdfjob.cCountOfPrintjobs = NbJobs
DoEvents
Loop
'Combine all PDFs into a single file and stop the printer
With pdfjob
.ccombineall
.cPrinterStop = False
End With

'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
End If
Next
pdfjob.cClose
Application.ScreenUpdating = True
Application.ActivePrinter = Default_Printer
Set pdfjob = Nothing
End Sub

Sub killtask(sappname As String)
Dim oProclist As Object
Dim oWMI As Object
Dim oProc As Object
Set oWMI = GetObject("winmgmts:")
If IsNull(oWMI) = False Then
Set oProclist = oWMI.InstancesOf("win32_process")
For Each oProc In oProclist
If UCase(oProc.Name) = UCase(sappname) Then
oProc.Terminate (0)
End If
Next oProc
Else
MsgBox "Killing """ & sappname & _
""" - Can't create WMI Object.", _
vbOKOnly + vbCritical, "CloseAPP_B"
End If
Set oProclist = Nothing
Set oWMI = Nothing
End Sub

Function Attente(x As Double)
Dim T As Double
T = Timer + x
Do While Timer <= T
DoEvents
Loop
End Function
1 2