Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles,
produire des fiches au format PDF. Le classeur contient des nombres
aléatoires, et l'actualisation du classeur par la touche F9 me permet de
produire des fiches différentes entre chaque impression. Je souhaite
produire une trentaine de fiches pour chaque classeur et autant de classeurs
à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire :
- enregistrer sous ... format PDF
- cocher la case "optimiser pour une taille minimale en vue d'une
publication sur le net"
- ouvrir les options et choisir d'imprimer tout le classeur
- nommer la fiche ("fiche_9" si c'est la neuvième)
- et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois
produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de
macro, mais ça bug.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Greg
Voir post suivant car post en double... désolé!
"Greg" a écrit dans le message de groupe de discussion : 4d01f40a$0$7696$
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles, produire des fiches au format PDF. Le classeur contient des nombres aléatoires, et l'actualisation du classeur par la touche F9 me permet de produire des fiches différentes entre chaque impression. Je souhaite produire une trentaine de fiches pour chaque classeur et autant de classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire : - enregistrer sous ... format PDF - cocher la case "optimiser pour une taille minimale en vue d'une publication sur le net" - ouvrir les options et choisir d'imprimer tout le classeur - nommer la fiche ("fiche_9" si c'est la neuvième) - et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de macro, mais ça bug.
Pourriez-vous m'aider?
Merci d'avance
Greg
Voir post suivant car post en double... désolé!
"Greg" <kln@LJKnd> a écrit dans le message de groupe de discussion :
4d01f40a$0$7696$ba4acef3@reader.news.orange.fr...
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles,
produire des fiches au format PDF. Le classeur contient des nombres
aléatoires, et l'actualisation du classeur par la touche F9 me permet de
produire des fiches différentes entre chaque impression. Je souhaite
produire une trentaine de fiches pour chaque classeur et autant de
classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire :
- enregistrer sous ... format PDF
- cocher la case "optimiser pour une taille minimale en vue d'une
publication sur le net"
- ouvrir les options et choisir d'imprimer tout le classeur
- nommer la fiche ("fiche_9" si c'est la neuvième)
- et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois
produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de
macro, mais ça bug.
"Greg" a écrit dans le message de groupe de discussion : 4d01f40a$0$7696$
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles, produire des fiches au format PDF. Le classeur contient des nombres aléatoires, et l'actualisation du classeur par la touche F9 me permet de produire des fiches différentes entre chaque impression. Je souhaite produire une trentaine de fiches pour chaque classeur et autant de classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire : - enregistrer sous ... format PDF - cocher la case "optimiser pour une taille minimale en vue d'une publication sur le net" - ouvrir les options et choisir d'imprimer tout le classeur - nommer la fiche ("fiche_9" si c'est la neuvième) - et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de macro, mais ça bug.
Pourriez-vous m'aider?
Merci d'avance
Greg
michdenis
Une version plus épurée !
Copie ce qui suit dans un module standard : Adapte le chemin du répertoire où tu veux copier les fichiers pdf en n'oubliant pas le "" à la fin. Chaque fichier PDF prend le nom de la feuille dans le classeur. Si un fichier existe déjà sous ce nom dans le répertoire, il sera écrasé !
'Dans le haut du module : 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()
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 -------------------------------------------- "Greg" a écrit dans le message de groupe de discussion : 4d027531$0$7466$
Voir post suivant car post en double... désolé!
"Greg" a écrit dans le message de groupe de discussion : 4d01f40a$0$7696$
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles, produire des fiches au format PDF. Le classeur contient des nombres aléatoires, et l'actualisation du classeur par la touche F9 me permet de produire des fiches différentes entre chaque impression. Je souhaite produire une trentaine de fiches pour chaque classeur et autant de classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire : - enregistrer sous ... format PDF - cocher la case "optimiser pour une taille minimale en vue d'une publication sur le net" - ouvrir les options et choisir d'imprimer tout le classeur - nommer la fiche ("fiche_9" si c'est la neuvième) - et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de macro, mais ça bug.
Pourriez-vous m'aider?
Merci d'avance
Greg
Une version plus épurée !
Copie ce qui suit dans un module standard :
Adapte le chemin du répertoire où tu veux copier les fichiers pdf en n'oubliant pas le "" à la fin.
Chaque fichier PDF prend le nom de la feuille dans le classeur.
Si un fichier existe déjà sous ce nom dans le répertoire, il sera écrasé !
'Dans le haut du module :
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()
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
--------------------------------------------
"Greg" a écrit dans le message de groupe de discussion : 4d027531$0$7466$426a74cc@news.free.fr...
Voir post suivant car post en double... désolé!
"Greg" <kln@LJKnd> a écrit dans le message de groupe de discussion :
4d01f40a$0$7696$ba4acef3@reader.news.orange.fr...
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles,
produire des fiches au format PDF. Le classeur contient des nombres
aléatoires, et l'actualisation du classeur par la touche F9 me permet de
produire des fiches différentes entre chaque impression. Je souhaite
produire une trentaine de fiches pour chaque classeur et autant de
classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire :
- enregistrer sous ... format PDF
- cocher la case "optimiser pour une taille minimale en vue d'une
publication sur le net"
- ouvrir les options et choisir d'imprimer tout le classeur
- nommer la fiche ("fiche_9" si c'est la neuvième)
- et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois
produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de
macro, mais ça bug.
Copie ce qui suit dans un module standard : Adapte le chemin du répertoire où tu veux copier les fichiers pdf en n'oubliant pas le "" à la fin. Chaque fichier PDF prend le nom de la feuille dans le classeur. Si un fichier existe déjà sous ce nom dans le répertoire, il sera écrasé !
'Dans le haut du module : 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()
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 -------------------------------------------- "Greg" a écrit dans le message de groupe de discussion : 4d027531$0$7466$
Voir post suivant car post en double... désolé!
"Greg" a écrit dans le message de groupe de discussion : 4d01f40a$0$7696$
Bonjour,
Je souhaite, à partir d'un classeur excel contenant plusieurs feuilles, produire des fiches au format PDF. Le classeur contient des nombres aléatoires, et l'actualisation du classeur par la touche F9 me permet de produire des fiches différentes entre chaque impression. Je souhaite produire une trentaine de fiches pour chaque classeur et autant de classeurs à faire (soit près de 1000 fiches).
Je suis actuellement sous 2007, ce qui m'oblige à faire : - enregistrer sous ... format PDF - cocher la case "optimiser pour une taille minimale en vue d'une publication sur le net" - ouvrir les options et choisir d'imprimer tout le classeur - nommer la fiche ("fiche_9" si c'est la neuvième) - et enfin... Valider....
La démarche est donc très répétitive et plutôt lourde, surtout si je dois produire 30 fiches pour chaque classeur. J'ai bien tenté l'enregistreur de macro, mais ça bug.