Création d'un pdf à partir d'un document word mais d'un macro sur excel

Résolu/Fermé
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 - 18 mai 2020 à 10:59
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 - 19 mai 2020 à 16:49
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
A voir également:

8 réponses

yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 mai 2020 à 12:11
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
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?
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
18 mai 2020 à 14:35
Désolé mais je ne comprend la question:
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?
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 18 mai 2020 à 15:18
Quand tu utilises Word, à la main, sans macro, ne peux-tu pas, en utilisant la fonction "sauver comme..." de Word, créer un fichier PDF?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
18 mai 2020 à 12:16
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

NomdocPdf = Left(NomWord, Len(NomWord) - 5) & ".pdf"
MsgBox NomdocPdf


0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 18 mai 2020 à 14:51
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


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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 18 mai 2020 à 15:28
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
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 19 mai 2020 à 09:50
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
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 19 mai 2020 à 10:54
Tu écris que tu as essayé tout ce que nous t'avons conseillé.
Peux-tu nous montrer le code VBA de la macro enregistrée avec l'enregistreur de macro pendant que tu enregistrais ton document Word?
Et également comment tu as utilisé ce code dans le VBA à partir d'Excel?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
19 mai 2020 à 10:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 19 mai 2020 à 11:27
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:
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
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 mai 2020 à 11:27
C'est bien sûr en Word que tu dois enregistrer la macro pendant que tu enregistres ton document Word. Cela te donnera du code VBA.
Et t'inspirer de ce code pour le mettre dans le VBA en Excel.
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
Modifié le 19 mai 2020 à 11:40
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:
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
19 mai 2020 à 11:44
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:

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
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
19 mai 2020 à 12:41
c'est bien mon intension je vous tien au courant pour le test du code que vous m'avez envoyé
merci
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 19 mai 2020 à 13:29
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 19 mai 2020 à 15:18
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

fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx")
MsgBox  fic_doc 
cheminpdf = Replace(fic_doc, "docx", "pdf")
MsgBox  cheminpdf 


Voilà
'--------------------------------------------------------------------------------
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
19 mai 2020 à 16:07
Dans la première MsgBox le chemin est bien présent mais pas dans la deuxième.


J'ai bien coché "Microsoft Word 16.0 Object Library"
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
19 mai 2020 à 16:23
il serait bon de montrer ton code, pas uniquement une seule ligne.
tu as probablement une variable de type Word.Document, à laquelle tu as assigné ton document. c'est à cette variable que j'essaierais d'appliquer ExportAsFixedFormat
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
19 mai 2020 à 16:26
le code complet est plus haut dans la discussion.
il m'a été donnée par cs-le Pivert
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
Modifié le 19 mai 2020 à 16:19
J'ai réussi à faire apparaitre le chemin dans la deuxième MsgBox mais j'ai toujours l'erreur:

Erreur d'exécution 4248
Commande non disponible: aucun document n'est ouvert.

Le document Word est bien ouvert sur mon deuxième écran.
0
jujuetd63 Messages postés 12 Date d'inscription lundi 18 mai 2020 Statut Membre Dernière intervention 19 mai 2020
19 mai 2020 à 16:49
Après plusieurs et en modifiant "activedocument" pour la variable la création du PDF s'effectue.

Merci à tous pour votre aide, mon ploblème est réglé.
0