VBA macro pour convertir en pdf

Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur -  
 belanf -
Bonjour à tous,

je recherche une macro vba pour convertir un fichier .xls en pdf.
Mes contraintes, utilisation de PDFMaker et Acrobat Reader 5.0.
Aprés moult recherche sur le net j'ai trouvé ce petit bout de code:

Const ThePath As String = "C:\XLD-PDF\"
Const TheFile As String = "TheTestingFile.PDF"
Sub Test()
CreePDFOnly True
End Sub

Sub CreePDFOnly(Optional PromptForPDFName As Boolean)
If ActiveWorkbook.Saved And Not PromptForPDFName Then
SendKeys "~"
ConvertToPDFA
ElseIf ActiveWorkbook.Saved And PromptForPDFName Then
SendKeys ThePath & TheFile + "~"
ConvertToPDFA
End If
End Sub

Le probléme est que lorsque je "passe" sur la ligne ConvertToPDFA
une message box me dit qu'il n'y a rien à ècrire et excel se bloque (je precise que le workbook actif et bien celui que je veux convertir).
Quelqu'un a il une idée d'ou peut venir cet effet?
Quelqu'un sait il ou je pourrai trouver la doc du PDFmaker.xla?
Ou mieux quelqu'un a t'il une macro qui fonctionne avec PDFMaker?

En vous remerciant d'avance, bonne année à toutes et à tous

Cordialement

COIN!

6 réponses

  1. Loulou
     
    Pour ceux qui comme moi ont galéré avant de trouver la réponse, voilà un code qui fonctionne avec PdfCreator:

    Sub ToPdf()

    Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
    NomExcel = ThisWorkbook.Name
    NomPdf = Left(NomExcel, Len(NomExcel) - 4) & ".pdf"
    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") = ThisWorkbook.Path
    .cOption("AutosaveFilename") = NomPdf
    .cOption("AutosaveFormat") = 0
    .cClearCache
    End With
    ThisWorkbook.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
    27
    1. jpw
       
      merci pour ce raccourci qui fonctionne !
      Mais comment restreindre à la zone d'impression plutot que de convertir la totalité des feuilles ?
      Par exemple, j'ai des feuilles avec un menu déroulant identique sur la droite et je ne veut imprimer que la zone sur la gauche ?
      0
    2. 2xpi Messages postés 1 Statut Membre
       
      Bonjour Loulou,

      Je viens de lire avec graaannde (!! ça fait aussi longtemps que je cherche !!!) attention ton message qui explique le lancement de pdfcreator merci beaucoup !

      Je rencontre le même problème, en effet j'utilise pdfcreator pour convertir des courriels dans outlook. Pour ce faire, je lance une application word via le vba dans outlook, dans laquelle j'appelle le pdfcreator ... sauf que celui-ci ... ne vient pas !

      Aurais-tu une idée qui expliquerait cela ?

      Merci !

      2xpi.

      Impression avec PDFcreator dans WORD
              Set wordapp = CreateObject("Word.Application")
              Set wordDoc = wordapp.Documents.Open(strChemin & "\" & NomTransfert_doc)
              wordapp.Visible = True
       
              With wordapp.Selection
              .TypeParagraph
              .TypeText Text:=Item.SenderName
              .TypeParagraph
              .TypeText Text:=Item.Body
              .TypeParagraph
              End With
      
              Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
              With pdfjob
                  If .cstart("/NoProcessingAtStartup") = False Then
                      MsgBox "Initialisation de PDFCreator impossible", vbCritical + vbOKOnly, "PrtPDFCreator"
                      Exit Sub
                  End If
              .cOption("UseAutosave") = 1
              .cOption("UseAutosaveDirectory") = 1
              .cOption("AutosaveDirectory") = strChemin
              .cOption("AutosaveFilename") = NomPDF
              .cOption("AutosaveFormat") = 0 '0 pour pdf
              .cClearCache
              End With
              ActivePrinter = "PDFCreator"
              Application.PrintOut copies:=1
              'ActiveDocument.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
      0
    3. nad86
       
      génial loulou, vraiment génial, ça marche très bien et c'est ce que je cherchais

      mais j'aurais une question, je n'y connais pas grand chose en programmation et il me faut, en plus de mettre en pdf toutes mes feuilles du classeur, que dans le nom du pdf il y ai en plus la date de la formaion de ce pdf

      je ne sais pas si je me suis bien expliquée

      en tout cas merci beaucoup, si quelqu'un peut m'aider.... c'est très important

      biz

      nad
      0
    4. Tom
       
      Juste un grand merci!
      0
    5. os
       
      Bonjour le code fonctionne bien
      Mais comment faire pour convertir quelques feuilles au lieu de tout le classeur.
      D'avance merci
      0
  2. lallo
     
    Bonjour,

    je cherche une macro qui me permettrait de créer, à partir d1 fichier excel, un pdf (Pdf Creator),
    Le nom du fichier pdf serait une concaténation d'une cellule A1;"-";B1 de la feuille imprimée.
    Le fichier pdf serait à envoyer toujours dans le même repertoire ex : "dossier1"

    Je souhaite que le fichier pdf reste ouvert pour visualisation et soit fermé manuellement.

    Est-ce possible ?

    Merci d'avance pour toute indication
    0
  3. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-)

    En fait, ce que tu dois lire, dans ce bout de code, c'est qu'il fait appel à un programme, ou un appilcation complémentaire ("ConvertToPDFA"), et que celui-ci, apparamment, a un blème....

    Un truc qu'il faut savoir, c'est que quand tu installes une appli, celle-ci va inscrire ses bibliothèque de routines dans le registre, en l'occurence, Acrobat Reader... Le blème, c'est que Reader, c'est clair, comme message !! ;-))))) C'est pas Maker !! Acrobat Reader te permet de lire, pas de créer !

    Si tu veux disposer des biblio pour créer, il te faut Acrobat TOUT COURT, pas Reader... Où alors tu utilises des trucs qui sortent des chemins Adobe... PDF Maker est une fonction d'Acrobat, pas du Reader qui n'est fait que pour lire... Sinon, il existe aussi des trucs pour créer au format PDF, mais je ne le garanti pas à 100%...

    Bref, si tu veux faire des PDF en bonne et due forme, vas voir plutôt du coté d'Acrobat... Et c'est tellement plus simple...

    Wild and Free
    -1
    1. Yannick Rousseau
       
      Bonjour,

      J'ai exactement le même soucis, sauf que moi j'ai bien Acrobat 5.0 installé. Et j'ai bien référencé le module PDFMaker.xla dans le fichier contenant la macro... et pourtant ça bloque aussi au moment de la convertion (le processus excel prends 100%).

      Que faire ?

      Merci
      0
    2. blux Messages postés 5043 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Salut,

      une soluce, plus simple à gérer (sur un seul poste) est d'installer une imprimante PDF (le site de sebsauvage indique comment faire) et ensuite imprimer en choisissant celle-ci...

      Qu'en penses-tu ?
      0
      1. Nyarta > blux Messages postés 5043 Date d'inscription   Statut Modérateur Dernière intervention  
         
        J'en pense que l'imprimante PDF est déjà installée, puisqu'elle est livrée avec Acrobat 5, mais je veux que la conversion se fasse automatiquement, sans intervention de l'utilisateur, directement depuis le code VBA. Quant à installer une autre imprimante PDF, d'une part, j'ai déjà celle d'Acrobat, ensuite je n'ai pas le droit d'installer autre chose sur mon poste dans ma boîte et surtout, mon application doit être portable dans ma boîte donc je dois utiliser Acrobat.
        0
  4. vince
     
    Bj,
    J'ai eu le meme pb.
    Simplement il ne faut pas oublier de rajouter les librairies correspondantes dans ta feuille xl.

    Pour cela tu vas dans Ms VBA et tu ouvres "OUTILS / PREFERENCES" et la tu rajoutes "PDFMaker" ou "Distiller " ..

    Slts
    Vince
    -2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ed
     
    Voici mon problème

    j'ai un dossier d'environ 400pdf qui portent déaj un nom

    mon but est grace à une macro de chager le nom de ces 400 fichier automatiquement en fonction de 2 variables qui se trouve dans mon classeur excel

    par ex

    un fichier se nomme "\1234_docu.pdf"
    et moi j'aimerais le renommer "1234_document.pdf"

    1234 et document étant variables pour mes 400 fichiers?

    Qu'en pensez vous??
    -2
  7. snejena Messages postés 1 Statut Membre
     
    en mettrant run.application("convertoPDF") ça marche
    -5
    1. filoulebauju
       
      IL Y A ENCORE PLUS SIMPLE.

      Tu enregistre une macro et pendant l'enregistrement, tu effectue ce que tu veux que ta macro fasse.
      0