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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| Option Explicit
Private Sub TesterPublipostageChampParChamp()
'Cette procédure crée un document par champ de fusion et le fusionne
Dim o As Object
Dim s As Shape
Dim f As Field
Dim lf As String
On Error GoTo Err_ListField
Dim reponse As Integer
Dim documentTest As String
Dim documentFusion As String
Dim documentFusionne As String
Dim d As Document
documentTest = ActiveDocument.Name
For Each f In Documents(documentTest).Fields
lf = Replace(Replace(f.Code, Chr(21), "}"), Chr(19), "{")
If lf = " FORMTEXT " Then GoTo NouveauChamp
If lf = " FORMCHECKBOX " Then GoTo NouveauChamp
Debug.Print f.Index; "/"; Documents(documentTest).Fields.Count, lf
f.Select
Selection.Copy
Documents.Add DocumentType:=wdNewBlankDocument: documentFusion = ActiveDocument.Name
Selection.Paste
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\MonChemin\MaBD.mdb", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:="QUERY rMaRequete", SQLStatement:= _
"SELECT * FROM [rMaRequete]", SQLStatement1:=""
'Déclenche la fusion
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
'Cherche le nom du document fusionné
For Each d In Documents
If d.Name Like "Lettres types*" Then
documentFusionne = d.Name
Exit For
End If
Next d
Documents(documentFusionne).Activate
'Demande à l'utilisateur si cela c'est bien passé
reponse = MsgBox("Fusion sans erreur (" & f.Index & "/" & Documents(documentTest).Fields.Count & ")", vbQuestion + vbYesNo + vbDefaultButton2)
If reponse = vbYes Then
'Ferme le documemt de fusion
Documents(documentFusion).Close wdDoNotSaveChanges
End If
'Ferme le document fusionné
Documents(documentFusionne).Close wdDoNotSaveChanges
NouveauChamp:
Documents(documentTest).Activate
Next f
NextShape:
Exit_ListField:
Exit Sub
Err_ListField:
Select Case Err.Number
Case 5917
Resume NextShape
Case Else
MsgBox "Erreur : " & Err.Number & ", " & Err.Description
End Select
End Sub |
Partager