Création d'un pdf à partir d'un document word mais d'un macro sur excel
Résolu
jujuetd63
Messages postés
12
Statut
Membre
-
jujuetd63 Messages postés 12 Statut Membre -
jujuetd63 Messages postés 12 Statut Membre -
Bonjour,
je travail sur un projet qui doit assembler plusieurs documents word en un seul depuis une application sur excel.
Cela est fait mais je souhaite enregistrer le document word final en version pdf.
Je reçois le message suivant à chaque essai:
Erreur de compilation
projet ou bibliothèque introuvable
voici la ligne indiquée comme fausse
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
"left" étant surligné
Je ne peux pas cocher dans les références les cases "PDFactivedoc1.0 type Library"
Sont elles nécessaires pour créer un PDF? (manque DLL????)
Voici le code complet que j'ai trouvé et que j'essaie de faire fonctionner:
Sub fonctionpdf()
Dim chemindoc, chemindossier, NomWord, NomdocPdf As String
Dim DefaultPrinter
Dim pdfjob
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
chemindoc = "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx"
chemindossier = "D:\COMPTE.R\test macro\teste"
Set DocWord = AppWord.Documents.Open(chemindoc, ReadOnly:=False)
NomWord = AppWord.ActiveDocument.Name
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
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") = chemindossier 'Chemin dossier destination .cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
pdfjob.cDefaultprinter = "PDFCreator"
AppWord.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
AppWord.Documents.Close
AppWord.Visible = False
End Sub
Pouvez vous m'aider
Merci d'avance
je travail sur un projet qui doit assembler plusieurs documents word en un seul depuis une application sur excel.
Cela est fait mais je souhaite enregistrer le document word final en version pdf.
Je reçois le message suivant à chaque essai:
Erreur de compilation
projet ou bibliothèque introuvable
voici la ligne indiquée comme fausse
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
"left" étant surligné
Je ne peux pas cocher dans les références les cases "PDFactivedoc1.0 type Library"
Sont elles nécessaires pour créer un PDF? (manque DLL????)
Voici le code complet que j'ai trouvé et que j'essaie de faire fonctionner:
Sub fonctionpdf()
Dim chemindoc, chemindossier, NomWord, NomdocPdf As String
Dim DefaultPrinter
Dim pdfjob
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
chemindoc = "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx"
chemindossier = "D:\COMPTE.R\test macro\teste"
Set DocWord = AppWord.Documents.Open(chemindoc, ReadOnly:=False)
NomWord = AppWord.ActiveDocument.Name
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
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") = chemindossier 'Chemin dossier destination .cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
pdfjob.cDefaultprinter = "PDFCreator"
AppWord.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
AppWord.Documents.Close
AppWord.Visible = False
End Sub
Pouvez vous m'aider
Merci d'avance
A voir également:
- Création d'un pdf à partir d'un document word mais d'un macro sur excel
- Word et excel gratuit - Guide
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Faire un organigramme sur word - Guide
- Signer un document word - Guide
- Comment reduire la taille d'un document - Guide
8 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour, peux-tu utiliser les balises de code quand tu partages du code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
pour le soucis avec
se pourrait-il que, dans les références cochées, il y en ait une qui soit indiquée comme défectueuse?
quand tu utilises Word sans macro, ne peux-tu pas créer un fichier PDF en imprimant le fichier? si oui, pourquoi ne pas faire de même via la macro?
pour le soucis avec
left():
se pourrait-il que, dans les références cochées, il y en ait une qui soit indiquée comme défectueuse?
quand tu utilises Word sans macro, ne peux-tu pas créer un fichier PDF en imprimant le fichier? si oui, pourquoi ne pas faire de même via la macro?
Bonjour,
chez moi cela fonctionne en cochant la référence: Microsoft Word 12.0 Object Library
mets cela pour voir si il n'y a pas une erreur de chemin
chez moi cela fonctionne en cochant la référence: Microsoft Word 12.0 Object Library
mets cela pour voir si il n'y a pas une erreur de chemin
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf" MsgBox NomdocPdf
Merci à vous deux, j'ai franchi l'étape du "left " grâce à vous.
Mais un problème en cache toujours un autre, je reçois maintenant le défaut "429""un composant ActiveX ne peut pas créer d'objet"
quand j'arrive sur la ligne:
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Ya t il un logiciel "PDFCreator "particulier à installer pour que cela fonction?
J'ai installé AdobeReader
Mais un problème en cache toujours un autre, je reçois maintenant le défaut "429""un composant ActiveX ne peut pas créer d'objet"
quand j'arrive sur la ligne:
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
Ya t il un logiciel "PDFCreator "particulier à installer pour que cela fonction?
J'ai installé AdobeReader
Sub fonctionpdf()
Dim chemindoc, chemindossier, NomWord, NomdocPdf As String
Dim DefaultPrinter
Dim pdfjob
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
AppWord.ShowMe
AppWord.Visible = True
chemindoc = "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx"
chemindossier = "D:\COMPTE.R\test macro\teste"
Set DocWord = AppWord.Documents.Open(chemindoc, ReadOnly:=False)
NomWord = AppWord.ActiveDocument.Name
NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")
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") = chemindossier 'Chemin dossier destination .cOption("AutosaveFilename") = NomPdf
.cOption("AutosaveFormat") = 0
.cClearCache
End With
pdfjob.cDefaultprinter = "PDFCreator"
AppWord.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
AppWord.Documents.Close
AppWord.Visible = False
End Sub
Il faut avoir PDFCreator sur sa machine
https://www.commentcamarche.net/telecharger/bureautique/17257-pdfcreator/
sinon, si tu as Office 2007 ou plus récent tu peux enregistrer en PDF.
Il te suffit donc de te servir de l'enregistreur de macro et d’enregistrer ton document Word, tu auras ta macro
@+ Le Pivert
https://www.commentcamarche.net/telecharger/bureautique/17257-pdfcreator/
sinon, si tu as Office 2007 ou plus récent tu peux enregistrer en PDF.
Il te suffit donc de te servir de l'enregistreur de macro et d’enregistrer ton document Word, tu auras ta macro
@+ Le Pivert
bonjour,
J'ai essayé tout ce que vous m'avez conseillé mais cela ne fonctionne pas. J'ai pu créer le pdf de mon document Word depuis ce dernier mais pas depuis excel.
Je vous décri ce que je fait actuellement:
Dans mon classeur excel:
.je sélectionne différents documents WORD que je copie dans un dossier "ASSEMBLAGE"
.puis j'ouvre un document WORD nommé "CONSTURCTION"
Dans le document word une macro effectue l'assemblage des documents
(je n'ai pas trouvé le moyen de le faire dans EXCEL)
Dans mon classeur excel:
.je modifie le document word assemblé et je l'enregistre sous le nom du projet.
Voila ou j'en suis.
Je souhaite maintenant convertir le document word assemblé en PDF.
j'ai d'autre fonctionnalité à ajouter par la suite comme assemblé le contenu de différents classeurs EXCEL en même temps que les documents word mais pas dans le même document.
au final je souhaite avoir:
Un manuel sous WORD
Un manuel sous PDF
Un classeur EXCEL avec les données liées au manuel
Pour le classeur EXCEL final cela fera surement l'objet d'une prochaine demande d'aide.
Pour le moment je veux juste convertir le document WORD assemblé en pdf.
si vous avez d'autres idées je suis preneur et si vous connaissez le moyen de faire l'assemblage sous EXCEL cela m'intéresse .
merci pour votre aide
J'ai essayé tout ce que vous m'avez conseillé mais cela ne fonctionne pas. J'ai pu créer le pdf de mon document Word depuis ce dernier mais pas depuis excel.
Je vous décri ce que je fait actuellement:
Dans mon classeur excel:
.je sélectionne différents documents WORD que je copie dans un dossier "ASSEMBLAGE"
.puis j'ouvre un document WORD nommé "CONSTURCTION"
Dans le document word une macro effectue l'assemblage des documents
(je n'ai pas trouvé le moyen de le faire dans EXCEL)
Dans mon classeur excel:
.je modifie le document word assemblé et je l'enregistre sous le nom du projet.
Voila ou j'en suis.
Je souhaite maintenant convertir le document word assemblé en PDF.
j'ai d'autre fonctionnalité à ajouter par la suite comme assemblé le contenu de différents classeurs EXCEL en même temps que les documents word mais pas dans le même document.
au final je souhaite avoir:
Un manuel sous WORD
Un manuel sous PDF
Un classeur EXCEL avec les données liées au manuel
Pour le classeur EXCEL final cela fera surement l'objet d'une prochaine demande d'aide.
Pour le moment je veux juste convertir le document WORD assemblé en pdf.
si vous avez d'autres idées je suis preneur et si vous connaissez le moyen de faire l'assemblage sous EXCEL cela m'intéresse .
merci pour votre aide
Tu ne nous dis pas si tu enregistres en pdf avec PDFCreator ou avec ta version d'Excel
Pour enregistrer un Word en PDF avec les versions Office 2007 et plus voir ceci:
https://www.faqword.com/index.php/word/environnement/892-creer-une-macro-pour-enregistrer-au-format-pdf
@+ Le Pivert
Pour enregistrer un Word en PDF avec les versions Office 2007 et plus voir ceci:
https://www.faqword.com/index.php/word/environnement/892-creer-une-macro-pour-enregistrer-au-format-pdf
@+ Le Pivert
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai supprimé la macro car je n'arrivé pas à la faire fonctionner dans Excel.
Je ne peux pas utiliser une macro sur le document Word car je souhaite le modifier avant par des macros qui sont dans Excel. Il faut donc que le document Word soit totalement créer avant de le mettre en PDF.
Si vous me dites comment faire, je peux vous fournir les deux documents Excel et Word qui me servent à l'assemblage.
Pour le teste avec Excel en utilisant l'enregistreur de macro, je ne suis pas arrivé à convertir le document Word mais seulement le classeur Excel.
Je ne sais pas s'il est possible d'enregistrer une macro Dans Excel qui converti en PDF un document Word.
J'utilise office 2016 et j'ai installer PDFCreator avec le liens que vous m'avez fourni. J'ai utilisé l'onglet présent maintenant dans les Documents Word et Excel. À la main cela fonction, je peu convertir mon classeur Excel depuis l'onglet du classeur et même chose dans Word.
C'est le faire depuis Excel dans Word que je ne sais pas faire après avoir enregistré mon document Word.
laligne de code excel suivante:
Cible.SaveAs2 "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx", FileFormat:=wdFormatXMLDocument
'Call fonctionpdf
(j'ai mis en commentaire l'appel de la fonction pour le moment)
voici le code présent dans Excel pour l'assemblage:
Je ne peux pas utiliser une macro sur le document Word car je souhaite le modifier avant par des macros qui sont dans Excel. Il faut donc que le document Word soit totalement créer avant de le mettre en PDF.
Si vous me dites comment faire, je peux vous fournir les deux documents Excel et Word qui me servent à l'assemblage.
Pour le teste avec Excel en utilisant l'enregistreur de macro, je ne suis pas arrivé à convertir le document Word mais seulement le classeur Excel.
Je ne sais pas s'il est possible d'enregistrer une macro Dans Excel qui converti en PDF un document Word.
J'utilise office 2016 et j'ai installer PDFCreator avec le liens que vous m'avez fourni. J'ai utilisé l'onglet présent maintenant dans les Documents Word et Excel. À la main cela fonction, je peu convertir mon classeur Excel depuis l'onglet du classeur et même chose dans Word.
C'est le faire depuis Excel dans Word que je ne sais pas faire après avoir enregistré mon document Word.
laligne de code excel suivante:
Cible.SaveAs2 "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx", FileFormat:=wdFormatXMLDocument
'Call fonctionpdf
(j'ai mis en commentaire l'appel de la fonction pour le moment)
voici le code présent dans Excel pour l'assemblage:
Sub assemb()
Dim Appli As Word.Application
Dim Cible As Word.Document
Dim ciblepdf As String
Dim separateur As Byte
Dim nfichier As String
'r?cuperation page de garde et documents
If Range("h1") = "" Then
MsgBox ("entrez le nom du projet et la date")
Else
If Range("h2") = "" Then
MsgBox ("entrez la date")
Else
Call pagegarde
Call ensem1
Call ensem2
Call ensem3
Call ensem4
Call ensem5
Call ensem6
Call ensem7
Call ensem8
Call ensem9
Call ensem10
Call ensem11
Call ensem12
Call ensem13
Call ensem14
Call ensem15
Call ensem16
Call ensem17
Call ensem18
Call ensem19
Call ensem20
'assemblage du document final appel du document word construction
Set Appli = CreateObject("Word.Application")
Set Cible = Appli.Documents.Open("D:\COMPTE.R\test macro\teste\construction.docm")
Appli.Visible = True
MsgBox ("Les documents ont ?t? assembl?s pour poursuivre cliquer sur ok")
Cible.Bookmarks("nom").Range.Text = Cells(1, 8)
Cible.Bookmarks("date").Range.Text = Cells(2, 8)
MsgBox ("v?rification avant enregistrement sous")
Cible.SaveAs2 "D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx", FileFormat:=wdFormatXMLDocument
'Call fonctionpdf
Cible.Close
Appli.Visible = False
End If
End If
End Sub
C'est ce que j'ai fait mais je n'ai pas réussi à le faire fonctionner depuis Excel. j'ai rajouté dans ma réponse précédente le code que j'ai dans Excel pour piloter Word.
Voici celui que j'ai dans Word:
Je souhaitai fait cette opération depuis excel aussi mais je n'y suis pas arrivé voila pourquoi j' ai des codes dans deux documents.
tout de suite je dois attendre que Word et fait l'assemblage avec le code ci dessus avant de pouvoir poursuivre le code Excel (réponse 5 )donc voila pourquoi dans le code Excel, il y a des MSGBOX.
J'utilise office 2016.
Voici celui que j'ai dans Word:
Sub assemblageDoc()
Dim dlgFile As FileDialog
Dim nTotalFiles As Integer
Dim nEachSelectedFile As Integer
ChDir "D:\COMPTE.R\test macro\assemblage\"
Set dlgFile = Application.FileDialog(msoFileDialogFilePicker)
With dlgFile
.AllowMultiSelect = True
If .Show <> -1 Then
Exit Sub
Else
nTotalFiles = .SelectedItems.Count
End If
End With
For nEachSelectedFile = 1 To nTotalFiles
Selection.InsertFile dlgFile.SelectedItems.Item(nEachSelectedFile)
If nEachSelectedFile < nTotalFiles Then
Selection.InsertBreak Type:=wdPageBreak
Else
If nEachSelectedFile = nTotalFiles Then
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="2"
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
With ActiveDocument
.TablesOfContents.Add Range:=Selection.Range, RightAlignPageNumbers:= _
True, UseHeadingStyles:=True, UpperHeadingLevel:=1, _
LowerHeadingLevel:=3, IncludePageNumbers:=True, AddedStyles:="", _
UseHyperlinks:=True, HidePageNumbersInWeb:=True, UseOutlineLevels:= _
True
.TablesOfContents(1).TabLeader = wdTabLeaderDots
.TablesOfContents.Format = wdIndexIndent
End With
Exit Sub
End If
End If
Next nEachSelectedFile
End Sub
Je souhaitai fait cette opération depuis excel aussi mais je n'y suis pas arrivé voila pourquoi j' ai des codes dans deux documents.
tout de suite je dois attendre que Word et fait l'assemblage avec le code ci dessus avant de pouvoir poursuivre le code Excel (réponse 5 )donc voila pourquoi dans le code Excel, il y a des MSGBOX.
J'utilise office 2016.
il faut pas tout mélanger!
La demande est Création d'un pdf à partir d'un document word mais d'un macro sur excel
voilà une macro qui fait le job:
si cela te convient tu mets en résolu et tu postes une autre demande pour la suite.
Sinon on ne va pas s'y retrouver
@+ Le Pivert
La demande est Création d'un pdf à partir d'un document word mais d'un macro sur excel
voilà une macro qui fait le job:
Option Explicit
Sub savePDF()
'--------------------------------------------------------------------------------
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
'--------------------------------------------------------------------------------
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim fic_doc As String
Dim cheminpdf As String
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx")
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open(fic_doc)
cheminpdf = Replace(fic_doc, "docx", "pdf")
'enregistre en pdf dans le dossier en cours
ActiveDocument.ExportAsFixedFormat outputFileName:=cheminpdf, _
exportFormat:=wdExportFormatPDF
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
si cela te convient tu mets en résolu et tu postes une autre demande pour la suite.
Sinon on ne va pas s'y retrouver
@+ Le Pivert
J'ai fait plusieurs test mais j'ai toujours ce message d'erreur qui s'affiche:
Erreur d'exécution 4248
Commande non disponible: aucun document n'est ouvert.
Pourtant le document est bien ouvert.
Avez vous une idée
ligne en surbrillance:
ActiveDocument.ExportAsFixedFormat outputFileName:=cheminpdf, _
exportFormat:=wdExportFormatPDF
J'ai également fait des essais avec:
Set docWord = appWord.Documents.Open("D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx")
à la place de:
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx")
pour sélectionner directement le document créé mais j'ai le même resultat.
Erreur d'exécution 4248
Commande non disponible: aucun document n'est ouvert.
Pourtant le document est bien ouvert.
Avez vous une idée
ligne en surbrillance:
ActiveDocument.ExportAsFixedFormat outputFileName:=cheminpdf, _
exportFormat:=wdExportFormatPDF
J'ai également fait des essais avec:
Set docWord = appWord.Documents.Open("D:\COMPTE.R\test macro\teste\" & Range("h1").Value & ".docx")
à la place de:
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx")
pour sélectionner directement le document créé mais j'ai le même resultat.
C'est bien coché?
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Pourtant le document est bien ouvert.
on le voit dans la barre de tâches en bas?
mettre cela pour voir si c'est le bon chemin
Voilà
'--------------------------------------------------------------------------------
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Pourtant le document est bien ouvert.
on le voit dans la barre de tâches en bas?
mettre cela pour voir si c'est le bon chemin
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx")
MsgBox fic_doc
cheminpdf = Replace(fic_doc, "docx", "pdf")
MsgBox cheminpdf
Voilà
'--------------------------------------------------------------------------------
quand tu utilises Word sans macro, ne peux-tu pas créer un fichier PDF en imprimant le fichier? si oui, pourquoi ne pas faire de même via la macro?
Que veux tu dire?