Se connecter avec
S'enregistrer | Connectez-vous

[vba] convertir feuille excel en pdf

Dernière réponse : dans Programmation

Salut,
voilà ma question: comment convertir une feuille dans le classeur actif sans faire intervenir l'utilisateur?voila mon code:

Const ThePath As String = "C:\Documents and Settings\sheng\Desktop"
Const TheFile As String = "\testpdf.PDF"

Sub Imprimer()
Dim MonImprimanteParDéfaut
Sheets("Nom de la feuille").Select
SendKeys ThePath & TheFile + "~"
SendKeys ("{ENTER}")
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="Adobe PDF", Collate:=True
SendKeys ("{ENTER}")
End Sub

ce code convertit bien la feuille sous pdf par contre l'utilisateur doit entrer un nom pour sauvegarder et cliker sur enregistrer.Je voudrais donc savoir comment sauter cette étape en nommant par exemple le fichier pdf testpdf

merci d'avance pour votre aide.

Autres pages sur : vba convertir feuille excel pdf

Lassé par la pub ? Créez un compte

Bonjour,

Ayant eu le même problème et ayant trouvé une solution plus élégante, je vous la soumets (elle se sert de PDFCreator):

  1. Sub ToPdf()
  2.  
  3. Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
  4. NomExcel = ThisWorkbook.Name
  5. NomPdf = Left(NomExcel, Len(NomExcel) - 4) & ".pdf"
  6. With pdfjob
  7. If .cstart("/NoProcessingAtStartup") = False Then
  8. MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
  9. Exit Sub
  10. End If
  11. .cOption("UseAutosave") = 1
  12. .cOption("UseAutisaveDirectory") = 1
  13. .cOption("AutosaveDirectory") = ThisWorkbook.Path
  14. .cOption("AutosaveFilename") = NomPdf
  15. .cOption("AutosaveFormat") = 0
  16. .cClearCache
  17. End With
  18. ThisWorkbook.PrintOut copies:=1, ActivePrinter:="PDFCreator"
  19. Do Until pdfjob.cCountOfPrintjobs = 1
  20. DoEvents
  21. Loop
  22. pdfjob.cPrinterStop = False
  23. Do Until pdfjob.cCountOfPrintjobs = 0
  24. DoEvents
  25. Loop
  26. With pdfjob
  27. .cDefaultprinter = DefaultPrinter
  28. .cClearCache
  29. .cClose
  30. End With
  31. Set pdfjob = Nothing
  32.  
  33. End Sub



________________________
Dixit Moderator: C'est bien de faire le malin, c'est mieux de le faire de façon propre : c'est moi qui ai dû mettre ton message correctement en forme !
Expert Programmation

Le principal dans cette solution, c'est de disposer de PDFCreator.
Tu l'as précisé, je le souligne.

A la ligne 5, ce code n'est pas satisfaisant : L'extension d'un fichier peut ne pas être de 3 caractères. D'ailleurs, les extensions des fichiers produits par les dernières versions d'Office ne font plus 3 caractères. Un ptit coup de FileSystemObject.GetBaseName s'impose.

Placé en dernière ligne, 31, le Set Nothing ne sert pas à grand chose. D'autant que tu t'en dispenses à la ligne 9.

Pleins d'autres choses, mais ce serait du pinaillage.
_______________________

Bref, solution intéressante :) 

Bonjour,
je rencontre le même soucis, mais en Excel2007, il n'y a plus besoin de PDFCreator, il peut publier directement en PDF.
En revanche, idem, il demande le nom du fichier avant de le publier.
Et je n'arrive pas à lui dire que le nom du fichier est par exemple le contenu de la cellule D45.
Une idée ?
Merci d'avance
Marc

Bonjour à tous et joyeux noël !,

J'essai de faire la même chose mais en .vbs pour que la conversion des fichiers .xls en .pdf puisse se faire de nuit.

J'ai Excel 2003.

J'ai un peu adapté le code pour PDFCreator présenté ici mais j'ai un problème lorsque j'exécute mon VBS.

Voici mon code :

  1. Set objExcel = CreateObject("Excel.Application")
  2. Set objWorkbook = objExcel.Workbooks.Open("c:\blabla.xls")
  3. Set ActiveWindow = objExcel.ActiveWindow
  4. objExcel.Visible = False
  5.  
  6.  
  7. sNomPDF = "Essai.pdf"
  8. sCheminPDF = "c:\"
  9.  
  10. Set jobPDF = CreateObject("PDFCreator.clsPDFCreator")
  11.  
  12. With jobPDF
  13. If .cStart("/NoProcessingAtStartup") = False Then
  14. MsgBox "Initialisation de PDFCreator impossible", vbCritical + vbOKOnly, "PDFCreator"
  15. End If
  16. .cOption("UseAutosave") = 1
  17. .cOption("UseAutosaveDirectory") = 1
  18. .cOption("AutosaveDirectory") = sCheminPDF
  19. .cOption("AutosaveFilename") = sNomPDF
  20. .cOption("AutosaveFormat") = 0
  21. .cClearCache
  22. End With
  23.  
  24. ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
  25.  
  26. 'Fichier dans la file d'attente
  27. Do Until jobPDF.cCountOfPrintjobs = 1
  28. DoEvents
  29. Loop
  30. jobPDF.cPrinterStop = False
  31.  
  32. 'Attendre que la file d'attente soit vide
  33. Do Until jobPDF.cCountOfPrintjobs = 0
  34. DoEvents
  35. Loop
  36. jobPDF.cClose
  37. Set jobPDF = Nothing


J'ai systématiquement une erreur à la ligne :

  1. ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="PDFCreator"


Au niveau des
  1. :=
, il me dit qu'une instruction est attendue.

Problème de syntaxe avec VBS ?

Merci de votre aide, je suis bloqué :( 
Expert Programmation

Ouh que je n'aime pas ces ActiveTrucs ou ces SelectedMachins.
Je n'ai pas testé tout ça mais il m'est avis que tu devrais compter sur des objets bien définis plutôt que sur des objets actifs. :o 

Joyeuses Fêtes.
Lassé par la pub ? Créez un compte