Bonjour à tous,
j'ai un petit soucis avec pdfcreator depuis les macros excel vba :
j'utilise excel pour renseigner différents champs, dont des relevés de mesures, d'où sont tirés des graphiques sur différentes feuilles, ainsi qu'une partie rapport (texte mis en forme), toujours sous excel.
une macro me permet de mettre en forme une partie du rapport : certains mots devant être mis en Italque dans une cellule ; celle-ci fonctionne à merveille grâce à zeb.
la seconde me permet d'imprimer à la volée toute les feuilles devant constituer le rapport papier, et fonctionne également, je me suis débrouillé tout seul pour celle-ci.
la troisième me permet de créer une copie renommée du fichier renseigné, en cherchant l'existence ou non du chemin d'enregistrement, et à défaut de la créer, puis de fermer le nouveau fichier et de revenir au fichier initial vierge.
en fin, la dernière macro qui me pose soucis concerne l'utilisation de pdfcreator : j'ai réussi sur la première partie de ce que je veux faire : convertir les mêmes feuilles à imprimer en les regroupant en un seul fichier, après avoir également collé un jpeg de signature.
là où je coince, c'est sur la seconde partie : après avoir fusionner les différentes feuilles dans l'ordre d'impression, je veux ajouter un dernier fichier au format déjà pdf, dont le nom dépend d'une cellule dont le résultat dépend des renseignements saisis, et fusionner ces deux nouveaux fichiers en file d'attente pour au final ne créer qu'un seul pdf complet.
je voudrais également que ce pdf ne puisse que être lu et/ou imprimé, qu'il ne soit pas possible de sélectionner (et donc copier en vue de modification) du texte ou quoique ce soit dessus. Mais ça ce sera pour la suite.
je vous joins donc le code de ma 4ème macro, peut-être pas très propre, mais qui fonctionne pour la première partie du problème, la nouvelle instruction devant être placée entre les lignes 97 & 98.
j'ai essayé avec .cAddPrintJob, mais quelque chose n'est pas codé correctement, c'est pourquoi je vous demande un peu d'aide et surtout d'explication
par avance merci
[cpp]Sub Création_pdf()
' Création_pdf Macro
' Macro enregistrée le 04/10/2010 par
Sheets("Renseignements machine").Select
Dim annee As String
Dim client As String
Dim fichier As String
Dim window As String
Dim cheminannee As String
Dim cheminclient As String
Dim rapport As String
Dim test As String
Dim debut As label
Dim fin As label
Dim racc As String
Dim ps As String
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
test = [L1].Value
If test = "" Then GoTo debut
MsgBox "NOM DU CLIENT, NUMERO DU RAPPORT OU DATE, NON RENSEIGNES, VERIFIEZ ET RE-ESSAYEZ !!!", vbOKOnly, "OUBLIS !!!"
GoTo fin
debut:
racc = [j6].Value
rapport = "E:\Dossiers Clients\Modèles de documents\Rapport Standard MMT.xls"
annee = [i46].Value
client = [b5].Value
fichier = [i45].Value
window = [i49].Value
cheminannee = [i47].Value
cheminclient = [i48].Value
If Dir(cheminannee, vbDirectory) = "" Then 'Création du dossier ANNEE si n'existe pas
MkDir cheminannee
End If
If Dir(cheminclient, vbDirectory) = "" Then 'Création du dossier CLIENT si n'existe pas
MkDir cheminclient
End If
sPDFName = [b31].Value & ".pdf"
sPDFPath = [i50].Value
Set pdfjob = New PDFCreator.clsPDFCreator
With pdfjob
.cDefaultPrinter = True
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Il y a des documents dans la file d'attente, purger la relancer la commande", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
Sheets("Rapport").Select 'Insertion du jpeg de la signature
Range("C79").Select
ActiveSheet.Pictures.insert( _
"E:\Dossiers Clients\Modèles de documents\SIGNATURE REDIM.jpg").Select
Selection.ShapeRange.IncrementLeft 60#
Selection.ShapeRange.ScaleWidth 6.64, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 6.64, msoFalse, msoScaleFromTopLeft
Application.ActivePrinter = "PDFCreator sur Ne00:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"PDFCreator sur Ne00:", Collate:=True
Sheets("AXE X").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("AXE Y").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("AXE Z").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 4").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Equerrages").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Do Until pdfjob.cCountOfPrintjobs = 9 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
.cCombineAll
Do Until pdfjob.cCountOfPrintjobs = 1 'attent que la fusion des feuilles est complète
DoEvents
Loop
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0 'attent que la fusion des feuilles est complète
DoEvents
Loop
.cClearCache
.cClose
End With
Sheets("Rapport").Select
Range("C79").Select
ActiveSheet.Pictures.Select
Selection.Delete
Sheets("Renseignements machine").Select
fin:
End Sub[/cpp]
ps : il reste dans ce code une partie de la 3ème macro qui me permet de vérifier l'existence de l'arborescence ou va être enregistrer le pdf (au même endroit que le fichier excel)
edit : à savoir que ce que je veux faire fonctionne manuellement
j'ai un petit soucis avec pdfcreator depuis les macros excel vba :
j'utilise excel pour renseigner différents champs, dont des relevés de mesures, d'où sont tirés des graphiques sur différentes feuilles, ainsi qu'une partie rapport (texte mis en forme), toujours sous excel.
une macro me permet de mettre en forme une partie du rapport : certains mots devant être mis en Italque dans une cellule ; celle-ci fonctionne à merveille grâce à zeb.
la seconde me permet d'imprimer à la volée toute les feuilles devant constituer le rapport papier, et fonctionne également, je me suis débrouillé tout seul pour celle-ci.
la troisième me permet de créer une copie renommée du fichier renseigné, en cherchant l'existence ou non du chemin d'enregistrement, et à défaut de la créer, puis de fermer le nouveau fichier et de revenir au fichier initial vierge.
en fin, la dernière macro qui me pose soucis concerne l'utilisation de pdfcreator : j'ai réussi sur la première partie de ce que je veux faire : convertir les mêmes feuilles à imprimer en les regroupant en un seul fichier, après avoir également collé un jpeg de signature.
là où je coince, c'est sur la seconde partie : après avoir fusionner les différentes feuilles dans l'ordre d'impression, je veux ajouter un dernier fichier au format déjà pdf, dont le nom dépend d'une cellule dont le résultat dépend des renseignements saisis, et fusionner ces deux nouveaux fichiers en file d'attente pour au final ne créer qu'un seul pdf complet.
je voudrais également que ce pdf ne puisse que être lu et/ou imprimé, qu'il ne soit pas possible de sélectionner (et donc copier en vue de modification) du texte ou quoique ce soit dessus. Mais ça ce sera pour la suite.
je vous joins donc le code de ma 4ème macro, peut-être pas très propre, mais qui fonctionne pour la première partie du problème, la nouvelle instruction devant être placée entre les lignes 97 & 98.
j'ai essayé avec .cAddPrintJob, mais quelque chose n'est pas codé correctement, c'est pourquoi je vous demande un peu d'aide et surtout d'explication
par avance merci
[cpp]Sub Création_pdf()
' Création_pdf Macro
' Macro enregistrée le 04/10/2010 par
Sheets("Renseignements machine").Select
Dim annee As String
Dim client As String
Dim fichier As String
Dim window As String
Dim cheminannee As String
Dim cheminclient As String
Dim rapport As String
Dim test As String
Dim debut As label
Dim fin As label
Dim racc As String
Dim ps As String
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
test = [L1].Value
If test = "" Then GoTo debut
MsgBox "NOM DU CLIENT, NUMERO DU RAPPORT OU DATE, NON RENSEIGNES, VERIFIEZ ET RE-ESSAYEZ !!!", vbOKOnly, "OUBLIS !!!"
GoTo fin
debut:
racc = [j6].Value
rapport = "E:\Dossiers Clients\Modèles de documents\Rapport Standard MMT.xls"
annee = [i46].Value
client = [b5].Value
fichier = [i45].Value
window = [i49].Value
cheminannee = [i47].Value
cheminclient = [i48].Value
If Dir(cheminannee, vbDirectory) = "" Then 'Création du dossier ANNEE si n'existe pas
MkDir cheminannee
End If
If Dir(cheminclient, vbDirectory) = "" Then 'Création du dossier CLIENT si n'existe pas
MkDir cheminclient
End If
sPDFName = [b31].Value & ".pdf"
sPDFPath = [i50].Value
Set pdfjob = New PDFCreator.clsPDFCreator
With pdfjob
.cDefaultPrinter = True
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Il y a des documents dans la file d'attente, purger la relancer la commande", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
Sheets("Rapport").Select 'Insertion du jpeg de la signature
Range("C79").Select
ActiveSheet.Pictures.insert( _
"E:\Dossiers Clients\Modèles de documents\SIGNATURE REDIM.jpg").Select
Selection.ShapeRange.IncrementLeft 60#
Selection.ShapeRange.ScaleWidth 6.64, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 6.64, msoFalse, msoScaleFromTopLeft
Application.ActivePrinter = "PDFCreator sur Ne00:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"PDFCreator sur Ne00:", Collate:=True
Sheets("AXE X").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("AXE Y").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("AXE Z").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Volume 4").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Equerrages").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Do Until pdfjob.cCountOfPrintjobs = 9 'attent que l'impression soit dans la file d'attente de pdf créator
DoEvents
Loop
.cCombineAll
Do Until pdfjob.cCountOfPrintjobs = 1 'attent que la fusion des feuilles est complète
DoEvents
Loop
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cPrinterStop = False
Do Until pdfjob.cCountOfPrintjobs = 0 'attent que la fusion des feuilles est complète
DoEvents
Loop
.cClearCache
.cClose
End With
Sheets("Rapport").Select
Range("C79").Select
ActiveSheet.Pictures.Select
Selection.Delete
Sheets("Renseignements machine").Select
fin:
End Sub[/cpp]
ps : il reste dans ce code une partie de la 3ème macro qui me permet de vérifier l'existence de l'arborescence ou va être enregistrer le pdf (au même endroit que le fichier excel)
edit : à savoir que ce que je veux faire fonctionne manuellement