Macro enregistrement document word en pdf
Bonsoir,
J'ai effectué un publipostage sur word. Je souhaite ensuite découper le document (qui fait plus de 600 pages) en 600 documents en format pdf et ayant un nom dépendant de quelque chose inscrit dans le corps du document word.
Exemple en page 1 j'ai Monsieur Clément Dupont -> je souhaite que le document soit enregistré sous le nom Clément Dupont en format pdf
En page 2 j'ai Monsieur Eric Tartenpion -> je souhaite que le document soit enregistré sous le nom Eric Tartenpion en format pdf
Etc etc
En cherchant un peu voici la macro que j'ai pu trouver :
Sub BreakOnPage()
Application.Browser.Target = wdBrowsePage
For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")
ActiveDocument.Bookmarks("\page").Range.Copy
Documents.Add
Selection.Paste
Selection.TypeBackspace
ChangeFileOpenDirectory "C:\Users\Benjamin\Desktop\VBA\Test macro copie document"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum & ".pdf"
ActiveDocument.Close
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
Mais problème deux choses ne fonctionnent pas dans ma macro :
- Après avoir executer la macro, lorsque je cherche à ouvrir les documents pdf j'ai l'erreur suivante qui apparait "Adobe n'a pas pu ouvrir le fichier car il n'est pas pris en charge ou il est endommagé (il a été envoyé en tant que pièce jointe et n'a pas été décodé correctement, par exemple)
- Second problème je ne sais pas comment donner un nom en fonction d'un texte présent dans chaque page.
Je vous remercie d'avance pour votre aide,
Bonne soirée !
Bonjour,
Je n'ai malheureusement toujours pas trouvé de solution à mon problème, pouvez-vous m'aider ?
Merci d'avance.
Bon week-end !
Bonjour
Voici une sub qui fait le publipostage en pdf directement qui marche chez moi sur office 2007 et que j'utilise régulièrement
plutôt que de découper le doc word en fichier indépendants
a adapter
Fred
Sub publi_()
'--------------------------------------------------------------------------------
'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 NomBase, fic_doc, cheminW, fichier_source, DocName As String
Dim nom_fichier, Nomsourcebase, message_boite As String
Dim fin, i As Integer
ChDir ActiveWorkbook.Path
'demande du fichier source W
message_boite = "fichier source du publipostage"
fic_doc = Application.GetOpenFilename("Fichiers Word (*.docx), *.docx", , message_boite)
Application.ScreenUpdating = False
'recupération du chemin ou se trouve le doc W pour enregistrement des PDF au meme endroit
fichier_source = ActiveWorkbook.Name
cheminW = Dir(fic_doc)
cheminW = Replace(fic_doc, cheminW, "")
'message_boite = "fichier contenant les nouveaux noms des comptes créers"
'Nomsourcebase = Application.GetOpenFilename("Fichiers Excel (*.csv), *.csv", , message_boite)
'sinon nom du fichier xls source en dure
NomBase = cheminW & "source_publipostage.xlsx"
Application.DisplayAlerts = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open(fic_doc)
With docWord.MailMerge
'Ouvre la base de données le fichier excel doit avoir sa feuille nommée 'feuil1'
.OpenDataSource Name:=NomBase, Connection:="Driver={Microsoft Excel Driver (*.xlsx)};" & "DBQ=" & NomBase & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [Feuil1$]"
fin = .DataSource.RecordCount
End With
For i = 1 To fin
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Spécifie la fusion vers un nouveau doc
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
'Prend en compte uniquement l'enregistrement i
With .DataSource
.FirstRecord = i
.LastRecord = i
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
'recupère le nom et prenom de la personne 'colonnes 1 et 2 du fichier source excel
.DataSource.ActiveRecord = i
DocName = .DataSource.DataFields(1).Value
DocName = DocName & " " & .DataSource.DataFields(2).Value
End With
nom_fichier = cheminW & DocName & ".pdf"
With appWord.ActiveDocument
'export pdf
.ExportAsFixedFormat OutputFileName:=(nom_fichier), _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=False, _
CreateBookmarks:=wdExportCreateHeadingBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=False, UseISO19005_1:=False
'fermeture du fichier W sans enregistrement
.Close False
End With
Next i
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub