Bonjour,
Je suis un peu "rouillé" en VBA et malgré des recherches je n'ai pas véritablement trouvé mon bonheur.
Je dois faire un publipostage sur la base d'une liste Excel et produire un document distinct par ligne Excel.
Je me suis donc basé sur l'excellent tutoriel d'Olivier Lebeau, ça fonctionne nickel !
Maintenant, on m'en demande évidemment plus.
Chaque document peut avoir de 0 à 4 adresses de "Copies" au bas du document, sous forme de liste.
Cela se présente comme ceci :
Et donc il faudrait supprimer la totalité du "pavé" s'il n'y aucune copie ou modifier "Copies" en "Copie" si une seule copie.Copies :
• «COPIE_1»
• «COPIE_2»
• «COPIE_3»
• «COPIE_4»
J'arrive à correctement compter le nombre de copie et à fusionner mes documents avec le code suivant :
Je ne suis évidemment pas contre la solution inverse, soit ajouter du texte et les copies en fonction du nombre de celles-ci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub TestPublipost() 'Déclaration des variables Dim iR As Integer Dim i As Integer Dim oDoc As Document Dim DocName As String Dim oDS As MailMergeDataSource Dim iCopie1 As Integer Dim iNbCopies As Integer ' Affectation des objets Set oDoc = ActiveDocument Set oDS = oDoc.MailMerge.DataSource iR = oDoc.MailMerge.DataSource.RecordCount 'Debug.Print iR' For i = 1 To iR With oDoc.MailMerge 'Définition du premier et dernier enregistrement .DataSource.FirstRecord = i .DataSource.LastRecord = i ' Envoi des données dans un nouveau document .Destination = wdSendToNewDocument ' Exécution du publipostage .Execute ' Actualisation de l'enregistrement pour la sauvegarde .DataSource.ActiveRecord = i iCopie1 = IIf(.DataSource.DataFields("COPIE_1").Value = "", 0, 1) iCopie2 = IIf(.DataSource.DataFields("COPIE_2").Value = "", 0, 1) iCopie3 = IIf(.DataSource.DataFields("COPIE_3").Value = "", 0, 1) iCopie4 = IIf(.DataSource.DataFields("COPIE_4").Value = "", 0, 1) iNbCopies = iCopie1 + iCopie2 + iCopie3 + iCopie4 MsgBox "Nombre copie(s) : " & iNbCopies, vbOKOnly + vbInformation, "Publipostage terminé" 'Utilisation du premier champ pour obtenir le nom du document DocName = .DataSource.DataFields("NO_DOSSIER").Value 'Debug.Print DocName; i' End With 'Sauvegarde du document publiposté With ActiveDocument .SaveAs "xxxxxxxxxxxxxxx\" & DocName & ".docx" .Close End With Next i MsgBox "Nombre de documents générés : " & i - 1, vbOKOnly + vbInformation, "Publipostage terminé" End Sub
Voyez-vous une solution pas trop complexe ?
Merci d'avance.
Partager