VBA pour générer PDF avec Acrobat 6

  • Initiateur de la discussion lpp
  • Date de début
L

lpp

Guest
Bonjour tous,

voilà mon soucis du jour:

je dois mettre en place une routine pour générer automatiquement la création d'un pdf à partir d'une feuille excel.
La methode proposée par Thierry sur tous les topic que j'ai pu trouvé sur le forum consiste à utiliser la commande sendkeys.
Malheureusement, après plusieurs tentatives infructueuses et une recherche approfondie sur d'uatre forum (VBA et PDF, francophones ou non), il apparait qu'on ne peut plus procéder de la sorte avec la version 6 d'acrobat... grrrr....
en gros, "acrobat writer", ça existe plus, maintenant c'est "adobe PDF" comme nom d'imprimante, et le fonctionnement n'est plus du tout le même (d'après ce que j'ai compris)


alors j'essaye de partir sur d'autres piste, mais je dois dire que je patauge...

par exemple: j'ai vu ds VB tools/references qu'il y a les bibliothèques "acrobat distiller" et "adobe acrobat 6.0 type library" que je peux cocher.
par contre je sais pas du tout comment je pourrais m'en servir.

une idée: serait-il possible d'iimprimer dans un fichier, puis toujours depuis excel convertir ce fichier .ps avec acrobat distiller pour obtenir un pdf?
 
L

lpp

Guest
Youpi!!! c'était la bonne piste!!!!!


voici l'astuce:

il faut activer les librairies définies ci-dessus, et après, avec ce code on obtient du pdf tout beau tout neuf!:

Private Sub CommandButton1_Click()

' Define the postscript and .pdf file names.
Dim PSFileName as String
Dim PDFFileName as String
PSFileName = "c:\myPostScript.ps"
PDFFileName = "c:\myPDF.pdf"

' Print the Excel range to the postscript file
Dim MySheet As WorkSheet
Set MySheet = ActiveSheet
MySheet.Range("myRange").PrintOut copies:=1, preview:=False, ActivePrinter:="Acrobat Distiller", printtofile:=True, collate:=True, prtofilename:=PSFileName

' Convert the postscript file to .pdf
Dim myPDF As PdfDistiller
Set myPDF = New PdfDistiller
myPDF.FileToPDF PSFileName, PDFFileName, ""

End Sub


y'a un peu de ménage à faire pr supprimer le fichier postscript par exemple, mais c'est tout bon, et super rapide!

à garder ds votre panier vba!

A+

lpp
 
@

@+Thierry

Guest
Bonsoir LPP, Dop, le Forum

Merci beaucoup pour avoir pensé à nous tenir informé de tes trouvailles (j'ai vu ton Post sur PlantetPDF, moi je suis inscrit directement sur le Forum Adobe)

J'ai essayé ton code sous Acrobat 5.0 / Distiller 5.0, mais là c'est moi qui suis planté ( ActiveX component can't create object or return reference to this object (Error 429))

J'ai essayé de remplacer (là où ça ne passe pas):
Set myPDF = New PdfDistiller

Par :
Set myPDF = CreateObject("PdfDistiller.PdfDistiller.1")

Mais même erreur... snif... Pourtant j'ai bien les référence "Acrobat Distiller" et "Adobe Acrobat 5.0 Type Library"

Enfin je garde ta macro au chaud car on devrait migrer sous Adobe 6.0 prochainement...

Mais juste une confirmation, Dop, tu es bien sous la Version 6.00 ?

Enfin en tout cas c'est vraiment sympa de revenir nous faire partager la solution que tu as trouvée

Bon Week End
@+Thierry
 
T

Ti

Guest
il me semble que si on passe par PDFWriter au lieu du Distiller, on s'économise la génération du postscript.
Je crois me souvenir avoir fait des tests dans ce genre il y a très longtemps et, dans mon souvenir, ça marchait bien.
 
@

@+Thierry

Guest
Bonsoir Ti, Lpp, Dop, le Forum

Oui moi j'utilise le Writer mais d'après ce que dit Lpp, sous Acrobat 6, y a plus ! Y a fini !!!

D'ailleurs sur le Forum officiel Adobe Acrobat For Windows (avec enregistrement) j'ai eu l'occasion de lire : "Adobe Acrobat 6.00 ........ Sucks !!!! "

(Et vlan encore un fil qui va faire dix milles petits !!!)

Enfin toi ..... "Magic Ti" tu vas nous trouver une solution car tu es au delà de tout ceci et surtout des fils où tu viens nous parler de moustache (tout simplement) c'est toi le plus impressionnant, (même à ce niveau)

Bien à Toi, Bien à Vous et Bonsoir Chez Vous !!!
@+Thierry
 
T

Ti

Guest
je reviens sur ce fil, parce que je me souviens que lorsque j'ai installé Acrobat 5, je n'avais pas non plus le Writer. J'ai pas mal cherché avant de m'apercevoir qu'il fallait préciser à l'Install qu'on voulait aussi installer ce Writer. Est-ce qu'il n'en serait pas de même avec la version 6 ?
 
L

lpp

Guest
salut tous,

je ne sais pas ce qu'il en est à l'install, vu que je suis qu'un utilisateur des moyens mis à ma disposition ds ma boite, mais il semblerait qu'il y ait vraiment une difference entre la 5 et la 6
lpp
 
@

@+Thierry

Guest
Bonjour Ti, Lpp, le Forum

Je sors du Forum Adobe Americain, et il y a vraiment beaucoup de Posts qui signalent que les Scripts s'appuyant sur le PdfWriter ne fonctionnent plus avec la Version 6.0 (il y a même beacoup de plaintes)

Donc je ne pense pas que ce soit une simple rumeur, par contre à chaque fois je ne trouve pas de grandes explications pour utiliser "Adobe PDF Printer" qui serait le remplaçant...

Sinon de mon coté j'ai donc essayé en vain d'appliquer l'exemple de Lpp, mais toujours rien à faire sous ma version 5.0

Par contre pour faire avancer le schmilblic j'ai essayé ceci pour être un peu plus propre qu'un SendKeys :

Sub PdfWriterTest1()
Dim MyPath As String
Dim TheFile As String

MyPath = ThisWorkbook.Path & "\"
TheFile = "Test"

Application.ActivePrinter = "Acrobat PDFWriter on LPT1:"
Sheets("Test").PrintOut PrintToFile:=True, _
PrToFileName:=MyPath & TheFile

End Sub

Mais c'est pas encore bien au point, on dirait que le PrToFileName ne prend pas en compte le Path mais que le File Name... De plus lorsque j'essaie de faire générer le PDF ailleurs que dans le même répertoire que le classeur et le current Dir, alors là j'ai un sbinz avec un file "Test" sans extention et illisible...

Ti tu t'y prends comment toi avec le PDFWriter ?

Bon Appétit
@+Thierry
 
@

@+Thierry

Guest
Re Bonjour

Tiens je viens de tomber sur la FAQ Adobe Acrobat, cette fois-ci plus d'équivoque :

NOTE: PDFWriter is only available as a custom install component in Acrobat 5.0, and it has been discontinued in Acrobat 6.0 entirely. Its use should be considered deprecated. The most common response to PDFWriter issues is, "Use Distiller."

Voilà donc ta source était bonne Lpp.

Par contre moi je n'avance pas avec ma macro pour le PdfWriter... J'ai même lu qu'il faut s'attaquer aux bases de registre ! C'est par là que tu es passé Ti ?

Bonne Fin d'Aprèm
@+Thierry
 
M

Mr Pasquier

Guest
Verrouiller/Déverrouiller un bouton de commande

Je souhaite verrouiller ou déverrouiller un bouton de commande en fonction de la valeur d’une zone de liste modifiable (à partir d’une liste de valeurs) pour l’enregistrement actif (sélectionné) d’un formulaire.
Le bouton de commande et la zone de liste font parti du même formulaire.

Pouvez-vous m’envoyer un exemple de fonction qui réalise ce que je souhaite ?
D’avance merci !
 
@

@+Thierry

Guest
Re: Verrouiller/Déverrouiller un bouton de commande

Bonjour Mr Pasquier, Ti, Lpp, Dop, le Forum

Benoit, je pense que tu es nouveau sur ce Forum et, par conséquent je te conseille de Lire notre Charte :



Et aussi la FAQ Technique (Re-cliquer sur OK de IE car la page ne s'affichera pas au premier lancement...

Ta question n'ayant strictement rien à voir avec ce fil de discussion, où d'ailleurs j'attends un confirmation de DOP sur la version d'Acrobat utilisée...Et, éventuellement un soluce de Ti si jamais il la retrouve vu qu'il fait du PDF tous les 36 du mois (lol).... Je te conseille de faire un nouveau sujet :

Donc tu fais ceci :

NouveauSujet01.jpg


Puis :
NouveauSujet02.jpg


Voilà sinon binvenu sur XLD Mr Pasquier !!!
Bienvenue_XLD.gif


Bon Après Midi
@+Thierry
 
T

Ti

Guest
Alors j'ai essayé de retrouver la façon de générer un PDF via le Writer. Je ne me trompais pas, ça marche, mais il faut spécifier une chaîne du genre "AcrobatPDFWriter sur LPT1:". L'ennui, c'est que tout le monde n'est pas sur LPT1 !
On pourrait retrouver ces infos en bidouillant un peu, mais j'ai préféré aller au plus simple en regardant ce que je pouvais faire avec la macro complémentaire AcrobatPDFWriter.xla (d'Acrobat 5).

Il suffit de mettre une référence à ce fichier dans notre programme pour avoir accès à ses macros. Seules quelques procédures nous y intéressent, mais ce n'est pas pour autant que les autres sont inutiles elles font un gros boulot en arrière-plan, c'est pourquoi il me semble plus sûr (et bien plus simple !) d'en passer par là plutôt que de faire un simple appel au Distiller.

Au fait, j'ai regardé, il y a bien génération d'un .ps, qui est supprimé ensuite, donc laissons faire...

Pour générer le PDF et lui donner un nom, je reprends le nom du classeur actif et je force la validation par un simple SendKeys. Il aurait été possible de le faire plus "élégamment" en modifiant très légèrement AcrobatPDFMaker.xla, mais outre qu'on n'est pas censé accéder à ces macros, cette façon de faire pourrait poser problème, si on voulait l'exporter dans un autre environnement que sa propre machine.

ATTENTION, comme je le signale dans le programme, si vous testez le testez sur lui-même, il vous plantera bel et bien Excel (je ne sais pas pourquoi, il doit y avoir des problèmes avec les nombreuses variables publiques déclarées depuis AcrobatPDFWriter.xla) donc testez-le depuis un autre fichier actif ! Et pour l'utiliser en toute sûreté, il vaudrait mieux le transformer lui-même en xla.

Dernière précision : ça tourne avec Acrobat 5 ! Je n'ai pas Acrobat 6, donc je ne sais pas ce qu'il en est avec cette nouvelle version.
 

Pièces jointes

  • PDF.zip
    8.6 KB · Affichages: 163
  • PDF.zip
    8.6 KB · Affichages: 165
  • PDF.zip
    8.6 KB · Affichages: 165
@

@+Thierry

Guest
Bonjour Ti, BigTony, Lpp, Dop, le Forum


Je suis relativement à la bourre pour partir au boulot, mais je vais regarder ceci attentivement Ti, j'ai juste entrevue par l'explorateur d'Objets de VBE un "dossier" "Références" comment arrives-tu à faire des trucs pareils Ti, tu es vraiment infernal !! Tu as intégé quoi des DLL dans VBA ? (lol)

Je vais regarder et tester ceci plus tard car je n'ai plus le temps, mais en tout cas je te remercie sincèremrent.

Sinon pour Christophe (BigTony), bien vu !!! je n'avais pas pensé à çà, merci à toi aussi.

Bon je vous tiens au courant, plutôt ce soir ou demain, car aujourd'hui c'est réunions sur réunions !!

Bien à vous et bonne journée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67