Convertir un *.doc en *.pdf via VBA

  • Initiateur de la discussion Vincent
  • Date de début
V

Vincent

Guest
Bonjour à tous,

Je suis un peu en galère: je n'arrive pas à convertir un fichier Word en fichier Pdf avec une macro excel. J'ai pas mal cherché sur le net, mais j'ai rien trouvé de satisfaisant.

J'ai Adobe Acrobat 6.

Si quelqu'un pourrait me débloquer rapidemant, ce serait vraiment nice!

Merci
 

21ch181

XLDnaute Junior
Bonjour,

Tu as ce petit logiciel gratuit qui fonctionne bien aussi :

Ce lien n'existe plus

De mémoire il crée une 'imprimante PDF' que tu peux choisir dans Word (ou consord) et le tour est joué !
(paron pour la mémoire mais j'en teste tellement souvent de ces petits trucs que je n'arrive pas à me souvenir de tout !)

Trouvé sur Framasoft.net qui est un excellent site de logiciels libres.

Cordialement
 

21ch181

XLDnaute Junior
Merci MrExcel

Sans maitriser du tout ce que tu as écris dans la macro du fil cité, je connaissais ce type d'utilisation tierce applicationles accés.
Mais parfois j'ai tendance à me simplifier la vie en faisant un print sur une imprimante pdf !

Mais encore merci, je retiens le fil.

Bonne continuation
 
G

glavi

Guest
J'ai le même problème que toi. Je souhaite que ma macro excel soit capable de 'convertir' mon fichier excel en fichier Acrobat. Le problème c'est que quand la fenêtre d'impression pour Acrobat s'affiche, je n'arrive pas programmer la macro pour lui donner un chemin d'accès à mon fichier pdf. :eek:
Quelqu'un connait-il bien la programmation en VBA ??? thanks
 

pat1545.

XLDnaute Accro
Salut,

avec donc win2pdf voilà mon tit code:

Sub imprime_PDF()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, PrintToFile:=True, Collate:=True,prtofilename:=ActiveSheet.Name & '.pdf', ActivePrinter:='printer PDF'
End Sub

attention aux coupures des lignes

Patrick
 

kolivier

XLDnaute Occasionnel
Bonjour je viens d'essayer ce code, mais apparemment je ne parviens pas a le faire fonctionner a ma sauce :


Application.Dialogs(xlDialogPrinterSetup).Show
IMPDEMANDE.PrintOut
PrintToFile = True
Collate = True
printofilename = impresultat.Range('B159').Value & '.pdf'


Merci pour vos précieux conseils
 

grosloulou

XLDnaute Nouveau
Re : Convertir un *.doc en *.pdf via VBA

J'en ai pas mal bavé sur celle-là alors je vous fais part du résultat...

Ci-dessous, une macro pour convertir un fichier word en PDF (depuis word):

Sub ToPdf()

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
NomWord = ActiveDocument.Name
NomPdf = Left(NomWord, Len(NomWord) - 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") = ActiveDocument.Path
.cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
Application.ActivePrinter = "PDFCreator"
Application.ActiveDocument.PrintOut copies:=1
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



Après, il suffit de faire appel à la macro depuis Excel, avec un truc du genre:

Sub ConversionWordPDFDepuisExcel()

Dim WordApp As Object
Dim WordDoc As Object

Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(Range"toto.doc")

toto = WordApp.Application.Run(MacroName:="ToPdf")

WordDoc.Close
WordApp.Quit


End Sub
 

ulys27

XLDnaute Nouveau
Re : Convertir un *.doc en *.pdf via VBA

Bonjour
Je cherche également à convertir un *.doc en *.pdf via VBA.

Ma problématique est la même :
-Ne pas afficher la boite de dialogue de PDFCREATOR
-Pouvoir nommer le fichier pdf résultant

J'ai utilisé la macro, qui me sembalit bien adaptée, telle quelle :
Elle bloque sur PDFCreator qui reste actif en tâche de fond.
Si je supprime ce qui se trouve après :
"Application.ActiveDocument.PrintOut copies:=1" la boite de dialogue s'affiche.

Je n'ai que quelques notions de VBA.
Merci pour votre aide.:confused:
 

MichD

XLDnaute Impliqué
Re : Convertir un *.doc en *.pdf via VBA

Bonjour,

Pour Microsoft Office 2007 et 2010, il est possible de télécharger cette macro complémentaire (add-in) ici :


Cette macro complémentaire n'est pas nécessaire pour office 2013, elle est déjà intégrée à Office.

Par la suite, cela donne une macro comme ceci :

VB:
'------------------------------------------------------
Sub test()

Dim Wd As Object, Dc As Object
Dim Chemin As String, Fichier As String
Dim NouveauNom As String

Chemin = "c:\Users\Ton Profil\Documents\"
Fichier = "Test.docm"

NouveauNom = Left(Fichier, Len(Fichier) - VBA.InStrRev(Fichier, "."))

Set Wd = CreateObject("Word.Application")
Set Dc = Wd.documents.Open(Chemin & Fichier)

'17 est la valeur numérique de cette constante : wdExportFormatPDF
'Pour utiliser la constante alphanumérique, tu dois ajouter la
'bibliothèque "Microsoft Word xx Objets library"
Dc.ExportAsFixedFormat Chemin & NouveauNom & ".pdf", 17
Dc.Close False
Wd.Quit
Set Dc = Nothing: Set Wd = Nothing
End Sub
'------------------------------------------------------

Microsoft fournit un exemple ici :
Ce lien n'existe plus

Si tu veux utiliser PdFCreator, un exemple de code.
Comme PdfCreator n'est pas installé sur mon ordinateur,
je n'ai pas testé expressément cette procédure....

VB:
'API pour déterminer l'imprimante par défaut.
Dans le haut du module standard

'---------------------------------------------------------------------------------
Private Const ERROR_INSUFFICIENT_BUFFER = 122&
Private Declare Function GetDefaultPrinter Lib "winspool.drv" Alias _
   "GetDefaultPrinterA" (ByVal pszBuffer As String, _
                         ByRef pcchBuffer As Long) As Long

'---------------------------------------------------------------------------------
Sub test()

Dim Wd As Object, Dc As Object
Dim Chemin As String, Fichier As String
Dim NouveauNom As String, ImprimanteActuel As String

'Répertoire où est le document
Chemin = "c:\Users\Ton Profil\Documents\"
'Nom du document Word
Fichier = "Test.docm"

'Nouveau nom qu'aura le ficher pdf (test.pdf)
NouveauNom = Left(Fichier, Len(Fichier) - _
    VBA.InStrRev(Fichier, ".")) & ".pdf"

Application.ScreenUpdating = False
'Création d'un instance Word
Set Wd = CreateObject("Word.Application")

'Désactive l'exécution des macros à l'ouverture du fichier
Wd.AutomationSecurity = msoAutomationSecurityForceDisable

'Ouverture du fichier Word
Set Dc = Wd.documents.Open(Chemin & Fichier)

'Définir l'imprimante active afin de pouvoir la
'remettre à la fin de l'opération
ImprimanteActuel = Nom_Imprimante_Active

'Lancer la procédure devant créer le fichier PDF
Call Instancier_PdFCreator(Dc, Chemin, NouveauNom)

'Remettre par défaut l'imprimante du début
Call Définir_Imprimante_Par_défaut(ImprimanteActuel)
Dc.Close False
Wd.Quit
'Libère la mémoire des objets
Set Dc = Nothing: Set Wd = Nothing
Application.ScreenUpdating = True
End Sub

'-------------------------------------------------------------------------------
Sub Instancier_PdFCreator(Dc As Object, Répertoire As String, _
                                        FichierDest As String)

killtask ("PDFCreator.exe") 'Procédure écrite plus bas...

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
'Make sure the PDF printer can start
If pdfjob.cStart("/NoProcessingAtStartup") = False Then
  MsgBox "Imposssible d'initialiser PDFCreator.", vbCritical + _
      vbOKOnly, "Erreur!"
  Exit Sub
End If

'Set all defaults
With pdfjob
   .cOption("UseAutosave") = 1
   .cOption("UseAutosaveDirectory") = 1
   .cOption("AutosaveDirectory") = Répertoire
   .cOption("AutosaveFilename") = FichierDest
   .cOption("AutosaveFormat") = 0
   .cClearCache
   .cPrinterStop = True
End With

Dc.PrintOut copies:=1, ActivePrinter:="PDFCreator"

With pdfjob
   .cPrinterStop = True
   .cCombineAll
   DoEvents
   .cPrinterStop = False
End With
'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
   DoEvents
Loop
pdfjob.cClose

End Sub

'---------------------------------------------------------------------------------
Sub killtask(sappname As String)
  Dim oProclist As Object
  Dim oWMI As Object
  Dim oProc As Object
  Set oWMI = GetObject("winmgmts:")
  If IsNull(oWMI) = False Then
      Set oProclist = oWMI.InstancesOf("win32_process")
      For Each oProc In oProclist
          If UCase(oProc.Name) = UCase(sappname) Then
              oProc.Terminate (0)
          End If
      Next oProc
  Else
      MsgBox "Killing """ & sappname & _
      """ - Can't create WMI Object.", _
      vbOKOnly + vbCritical, "CloseAPP_B"
  End If
  Set oProclist = Nothing
  Set oWMI = Nothing
End Sub

'---------------------------------------------------------------------------------
Sub Définir_Imprimante_Par_défaut(NomImprimante As String)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Name = '" & NomImprimante & "'")
For Each objPrinter In colInstalledPrinters
    objPrinter.SetDefaultPrinter
Next
End Sub

'---------------------------------------------------------------------------------
Function Nom_Imprimante_Active()
Dim lResult As Long, BufLen As Long
Dim PrinterName As String
BufLen = 0
' Récupère la taille nécessaire pour le nom
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Alloue le buffer pour le nom
PrinterName = String(BufLen, 0)
lResult = GetDefaultPrinter(PrinterName, BufLen)
' Supprime le zéro binaire de fin
Nom_Imprimante_Active = Left(PrinterName, InStr(PrinterName, Chr$(0)) - 1)
End Function
'---------------------------------------------------------------------------------
 
Dernière édition:

Numidia

XLDnaute Occasionnel
Re : Convertir un *.doc en *.pdf via VBA

Bj tt le monde probleme l'erreur signalée "Argument nommée introuvable" sur le morceau de code
Dc.PrintOut copies:=1, ActivePrinter:="PDFCreator" et lorsque je mis le curseur sur l'erreur il m’affiche un truc comme ça
ActivePrinter:="PDFCreator sur Ne00:" ca me dépasse !!!!!!!!!!!!!!!!!!
 

MichD

XLDnaute Impliqué
Re : Convertir un *.doc en *.pdf via VBA

Cette ligne de code : Dc.PrintOut copies:=1, ActivePrinter:="PDFCreator"

As-tu regardé dans le panneau de configuration de Windows / imprimante / le nom que porte l'imprimante "PdfCreator" ?
C'est ce nom que tu dois utiliser dans la ligne de code précédente.

Si tu n'y arrives pas, donne-moi l'adresse à partir de laquelle tu as téléchargé ta version de PdfCreator et je te ferai quelques tests plus tard...
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
399

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87