Génréation de fichiers PDF via VBA

Génréation de fichiers PDF via VBA - VB/VBA/VBS - Programmation

Marsh Posté le 24-04-2008 à 14:36:24    

Salut à tous !
 
Je souhaite créer des fichiers PDF à la volée
et dispose sur mon poste d'Adobe PDF /  
Acrobat Distiller.
J'ai inséré le code suivant dans mon fichier
Excel :
[cpp]
NomFichierPS = Path & NomFicher & ".ps"
Classeur.PrintOut copies:=1, preview:=False, ActivePrinter:="Acrobat PDF", printtofile:=True, collate:=True, prtofilename:=NomFichierPS
|/cpp]
 
Que je mettes PDF ou PS, il me génènre
des fichiers impossibles à lire... (pourtant,  
selon que je mette PDF ou PS, la taille du
fichier n'est pas la même. Quel est le  
problème ???
 
Merci d'avance !


Message édité par Profil supprimé le 24-04-2008 à 14:37:56
Reply

Marsh Posté le 24-04-2008 à 14:36:24   

Reply

Marsh Posté le 24-04-2008 à 14:39:28    

Juste comme ca avant de commencer, sais-tu comment on utilise Acrobat Distiller ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 24-04-2008 à 14:55:28    

Bah pas franchement, mais une fois le fichier
PS généré, lorsque je l'ouvre avec Acrobat
Distiller, celui-ci tente de me convertir le  
fichier au format PDF, mais il n'y parvient pas
et me met le message d'erreur suivant :
 
%%[ Error: syntaxerror; OffendingCommand: ) ]%%
%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%
%%[ Warning: PostScript error. No PDF file produced. ] %%

Reply

Marsh Posté le 24-04-2008 à 15:00:54    

Et quand tu le fais à la mano (pour un seul fichier : imprimer ...), ca marche ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 24-04-2008 à 15:02:57    

Quand j'imprime en PDF, oui, ça marche.

Reply

Marsh Posté le 24-04-2008 à 15:12:20    

Tu as essayé de mimer la manip avec le mode macro en enregistrement pour voir ce qu'il faisait ?


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 24-04-2008 à 15:21:18    

Il me fait la même chose...

Reply

Marsh Posté le 24-04-2008 à 16:18:04    

Up

Reply

Marsh Posté le 24-04-2008 à 17:19:03    

Salut


Option Explicit
 
'   sous VBE Menu Outils | Références
'   Cocher Acrobat Distiller
 
Sub Tst_Adobe_PDF_03()
Dim sNomFichierPS As String
Dim sNomFichierPDF As String
Dim sNomFichierLOG As String
Dim PDFDist As PdfDistiller
Dim PrinterDefault As String
 
    '   Sur un PC "Personnel" : a priori choix libre du Nom
    '   et de l'emplacement du fichier de sortie, on est logué en
    '   Administrateur sur son PC
    '
    '   Sur un PC "Entreprise" :
    '   Il faut être logué en Administrateur ou en
    '   Avoir les droits pour utiliser Distiller
    '   Les chemins PS PDF LOG devront être de la forme :
    '       "C:\Documents and Settings\UserName\.....\....."
 
    '   Si l'on a plusieurs imprimantes il faut :
    '       Sélectionner l'imprimante virtuelle Adobe PDF tout en conservant
    '           trace de l'imprimante utilisée par défaut
    '   Le N° de port réseau NeXY varie suivant le PC sur lequel la macro tourne
     
    PrinterDefault = Application.ActivePrinter
    Application.ActivePrinter = Imprimante_AdobePDF
   
    ' Ici le cas d'un PC "Personnel"
    sNomFichierPS = ThisWorkbook.Path & "\" & "Essai_AdobbePDF.ps"
    sNomFichierPDF = ThisWorkbook.Path & "\" & "Essai_AdobbePDF.pdf"
    sNomFichierLOG = ThisWorkbook.Path & "\" & "Essai_AdobbePDF.log"
 
    '   Impression d'une zone nommée
    ActiveSheet.Range("Zone" ).PrintOut Copies:=1, Preview:=False, _
                                       ActivePrinter:=Imprimante_AdobePDF, PrintToFile:=True, _
                                       Collate:=True, PrToFilename:=sNomFichierPS
 
    Set PDFDist = New PdfDistiller
    PDFDist.FileToPDF sNomFichierPS, sNomFichierPDF, ""
    Set PDFDist = Nothing
 
    Kill sNomFichierPS
    Kill sNomFichierLOG
 
    Application.ActivePrinter = PrinterDefault
End Sub
 
Private Function Imprimante_AdobePDF() As String
Dim i As Integer
Dim NomPortReseau As String
    ' 11 imprimantes réseau
    For i = 0 To 10
        If i < 10 Then
            NomPortReseau = "Adobe PDF sur Ne0" & i & ":"
        Else
            NomPortReseau = "Adobe PDF sur Ne" & i & ":"
        End If
        On Error Resume Next
        Application.ActivePrinter = NomPortReseau
        If ActivePrinter = NomPortReseau Then
            Exit For
        End If
    Next i
    Imprimante_AdobePDF = NomPortReseau
End Function


Message édité par kiki29 le 24-04-2008 à 22:46:31
Reply

Marsh Posté le 24-04-2008 à 20:43:53    

re, après pour imprimer tout le classeur ou seulement certaines feuilles le tout dans un seul fichier Pdf


    ThisWorkbook.PrintOut copies:=1, Preview:=False, _
                          ActivePrinter:=Imprimante_AdobePDF, PrintToFile:=True, _
                          Collate:=True, PrToFileName:=sNomFichierPS



Sheets(Array("Feuil2", "Feuil3", "Feuil5" )).PrintOut copies:=1, Preview:=False, _
                           ActivePrinter:=Imprimante_AdobePDF, PrintToFile:=True, _
                           Collate:=True, PrToFileName:=sNomFichierPS


Message édité par kiki29 le 24-04-2008 à 22:52:04
Reply

Marsh Posté le 24-04-2008 à 20:43:53   

Reply

Marsh Posté le 25-04-2008 à 08:52:08    

Merci beaucoup, ça m'a l'air particulièrement bien adapté à mon problème. Je teste ça et je vous tient au courant ! ;-)

Reply

Marsh Posté le 25-04-2008 à 09:37:07    

Arf... Il me met, au niveau de la ligne
"Set PDFDist = New PdfDistiller"
le message suivant :
"Erreur d'exécution '429':
 Un composant ActiveX ne peut pas créer d'objet"
 
Sachant que j'ai bien mis le composant
PDFDistiller en référent...
Alors j'ai essayé PdfDistiller6 à la place de
PdfDistiller, mais c'est la même chose...

Reply

Marsh Posté le 25-04-2008 à 12:16:12    

Salut
Le composant en référence se nomme "Acrobat Distiller"
Peut-être un probleme d'installation et d'enregistrement ?
Si sur PC "Entreprise" Il faut être logué en Administrateur ou en  
avoir les droits pour utiliser Acrobat Distiller


Message édité par kiki29 le 25-04-2008 à 12:27:12
Reply

Marsh Posté le 25-04-2008 à 12:30:05    

Je suis effectivement sur un PC d'entreprise,
et pas administrateur... Mais je pense avoir
les droits pour utiliser Acrobat Distiller.
Au niveau des composants, j'ai bien activé
"Acrobat Distiller" (et tous les autres com-
-posants Acrobat, au cas où).

Reply

Marsh Posté le 25-04-2008 à 14:13:12    

Bon, j'ai testé aussi - on sait
jamais - de désactiver les autres
Adobe et de ne laisser que le
Distiller, et ça donne exactement
la même chose.
Par contre si j'enlève aussi le  
Distiller, ça me met :
"Erreur de compilation :
 Type défini par l'utilisateur non défini"
:-) C'est bien un type défini indéfini.

Reply

Marsh Posté le 25-04-2008 à 14:47:42    

Je ne connais pas le composant « Acrobat Distiller », mais certains ActiveX ne réagissent pas correctement au mot clé New et en revanche fonctionnent avec le CreateObject.
Il peut aussi s'agir d'un problème de restriction de licence d'utilisation.

Reply

Marsh Posté le 25-04-2008 à 15:23:56    

Le fichier me fait pareil, et le CreateObject aussi... :-(

Reply

Marsh Posté le 25-04-2008 à 17:31:58    

Tu n'as pas les droits , donc voir ton administrateur ...
et tester alors en te loguant en administrateur

Reply

Marsh Posté le 28-04-2008 à 08:55:41    

Ceci ne m'est malheureusement pas
possible... Bon, bah je vais devoir
me taper 36 fichiers à exporter à  
la main... Chouette !

Reply

Marsh Posté le 29-04-2008 à 20:51:19    

Sinon, tu as PDF Creator qui fait ça très bien, la doc pour l'utiliser avec le vba est inclue dans le répertoire où est installé le logiciel ;)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 29-04-2008 à 21:24:08    

Salut, à part que le process PdfCreator reste actif dans certains cas ( pas toujours ) et nécessite de faire un kill de ce process
Sans les droits d'administration il lui sera difficile de l'installer


Message édité par kiki29 le 29-04-2008 à 21:24:26
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed