Bonjour,
dans un base que j'ai développé, j'ai mis en place un publipostage automatique qui se base sur une requête qui crée une table qui est la source de données de mon document de fusion.
voici le code:
dans ce code, la table PARAM est une table de paramètre ou je stocke, le document de fucion, le chemin de sauvegarde est les mails des pesonnes à qui un mail doit être envoyé une fois la fusion exécutée.
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
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 DoCmd.SetWarnings False Static ol As Outlook.Application Dim olmail As MailItem Dim Db As DAO.Database, RsParam As Recordset, RsFusion As Recordset Dim Tbl As DAO.TableDef Dim F As DAO.Field Set Db = CurrentDb Set RsParam = CurrentDb.OpenRecordset("PARAM", dbOpenTable) Do While Not RsParam.EOF Ope = RsParam![operation] Req = RsParam![requete] Tble = RsParam![Table] Fiche = RsParam![chemindoc] Path = RsParam![CheminSauv] MailPrinc = RsParam![DESTPRINC] MailSec = RsParam![DESTSEC] DoCmd.OpenQuery Req Lancer Set Db = CurrentDb Set Tbl = Db.TableDefs(Tble) For Each F In Tbl.Fields Set RsFusion = CurrentDb.OpenRecordset(Tble, dbOpenTable) If RsFusion.RecordCount <> 0 Then Do While Not RsFusion.EOF RsFusion.Edit If Not IsNumeric(RsFusion.Fields(F.Name)) Then If RsFusion.Fields(F.Name) = 0 Then RsFusion.Fields(F.Name) = "NON" ElseIf RsFusion.Fields(F.Name) = -1 Then RsFusion.Fields(F.Name) = "OUI" End If End If RsFusion.Update RsFusion.MoveNext Loop Else GoTo 1 End If Next F RsFusion.Close Set Db = Nothing Set RsFusion = CurrentDb.OpenRecordset(Tble, dbOpenDynaset) Dim wdapp As Word.Application Do While Not RsFusion.EOF Dim i i = RsFusion.AbsolutePosition + 1 Set wdapp = CreateObject("Word.application") With wdapp .Visible = True .Documents.Open Fiche, , True .ActiveDocument.MailMerge.DataSource.FirstRecord = i .ActiveDocument.MailMerge.DataSource.LastRecord = i .ActiveDocument.MailMerge.Execute .ActiveDocument.SaveAs Path & Ope & "_" & RsFusion![SOCIETE] & "_" & Format(Date, "dd_mm_yyyy") End With For Each Doc In wdapp.Documents Doc.Close savechanges:=wdDoNotSaveChanges Next Doc Set wdapp = Nothing RsFusion.MoveNext Loop Set ol = New Outlook.Application Set olmail = ol.CreateItem(olMailItem) With olmail .To = MailPrinc .CC = MailSec .Subject = "Fusion_" & Ope & "_du_" & Format(Date, "dd_mm_yyyy") .Body = "Sur la Mission " & Ope & ", " & "vous avez " & RsFusion.RecordCount & " Projet(s) fusionné(s)" & vbCrLf & "Vous pouvez les récupérer ici :" & vbCrLf & Path .Send End With RsFusion.Close Set Db = Nothing 1 RsParam.MoveNext Loop DoCmd.SetWarnings True DoCmd.Quit
ce code est dupliqué sur plusieurs bases.
mon problème est le suivant: sur une base, lorsque la comme Merge.execute se lance, j'ai l'erreur 5631 en pièce jointe.
Est-ce que vous avez déjà eu ce genre d'erreur ?
j'ai cherché une solution à ce problème sur les différents posts sur le publipostage mais rien.
mon second souci,
qu'elle est la commande avec laquelle le pourrais savoir qu'elle est le document actif depuis mon code VBA ?
Merci pour votre aide
Partager