Bonjour à tous,
A partir d'une macro VBA, j'ai pu créé à partir d'un document de publipostage Word autant de document .pdf que j'avais d'enregistrements.
Voici cette macro qui marche très bien
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Sub SavePubliAsPDF()
Dim LastRec As Integer
Dim Path As String, Id As String, Dir As String
Application.ScreenUpdating = False
'Choix du dossier d'enregistrement des fichiers
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Sélectionnez un dossier où enregistrer vos fichiers"
.Show
If Not (.SelectedItems.Count = 0) Then
Path = .SelectedItems(1)
Else
Exit Sub
End If
End With
'Décompte du nombre d'enregistrements dans le publipostage
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
LastRec = ActiveDocument.MailMerge.DataSource.ActiveRecord
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
'Enregistrement des fichiers
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = False
For i = 1 To LastRec Step 1
Id = ActiveDocument.MailMerge.DataSource.DataFields(2).Value
Dir = ActiveDocument.MailMerge.DataSource.DataFields(10).Value
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.DataSource.ActiveRecord = i
ActiveDocument.SaveAs Path & "\BSI 2017_" & Dir & "_" & Id & ".pdf", wdFormatPDF
End With
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next i
MsgBox "L'enregistrement de votre publipostage est terminé." & vbLf & vbLf & LastRec & " fichiers ont été enregistrés dans le dossier : " & Path, vbOKOnly + vbInformation, "Enregistrement du publipostage terminé"
Application.ScreenUpdating = True
End Sub |
J'ai voulu me servir de cette programmation pour créer des documents .doc (qui permet de modifier plus facilement qu'un fichier pdf).
J'ai tenté (de manière simpliste) en changeant cette ligne :
ActiveDocument.SaveAs Path & "\BSI 2017_" & Dir & "_" & Id & ".docx", wdFormatDOC
Sauf qu'évidemment, c'est mon document source de publipostage Word qui est enregistré pour chaque enregistrement.
Comment faire pour que ce soit
1 2
| With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument |
ce nouveau document qui soit enregistré sous un nom prédéfini par programmation (et non le Active Document qui est mon document source).
Merci beaucoup.
Sophie
Partager