Bonjour,
Je fais un publipostage mail vers outlook.
Mon code fonctionne mais il y a un comportement bizarre.
logiquement ca doit se passer comme cela :
Récupération du liste de destinataire pour alimenter le BCC du mail
Ajout d'une adresse mailling-list@maboite.fr au TO du mail.
sauvegarde du mail dans le dossier brouillons d'outlook pour modif avant envoi.
si outlook est fermé au moment de l'éxécution du code, cela fait nimporte quoi, le mail est collé dans la boite de réception, l'adresse To est manquante et meme parfois le mail n'existe carrément pas.
Pour palier à ce problème je fais une vérif sur la presence d'outlook ouvert, si celui n'est pas ouvert, le code l'ouvre et génére le mail. Là tout est ok sauf l'adresse To est manquante. Si je rééxécute aussitot le code la tout est parfait.
J'ai pensé à un problème de temporisation alors j'ai intercalé le code suivant :
mais bon cela ne change rien. Pourquoi cela fait ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Dim i As Long DoEvents 'cette boucle sert à créer une attente entre les deux affectations For i = 1 To 1000000000 Next
Ci-dessous tout le code :
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 Public Sub EnvoiMassif() 'Ajouter les références suivantes : 'Microsoft Outlook 'Microsoft DAO Dim oApp As Outlook.Application Dim oMail As Outlook.MailItem Dim oDB As DAO.Database Dim strContenu As String Dim oRst0 As DAO.Recordset Dim oRst1 As DAO.Recordset Dim strTo As String Dim sqlMail As String 'evalue si outlook est ouvert If IsOfficeRunning(App_outlook, True) Then 'Instancie Outlook Set oDB = CurrentDb Set oApp = CreateObject("Outlook.Application") 'Crée un nouveau message 'sqlMail = "SELECT * FROM tblMessage;" 'Set oRst0 = oDB.OpenRecordset(sqlMail) 'oRst0.MoveLast Set oMail = oApp.CreateItem(olMailItem) oMail.Body = "Tapez votre message ici" 'oMail.Body = oRst0.Fields("txtcorps") oMail.Subject = "MAILLING : Tapez le sujet du message" 'oRst0.Fields("strObjet") & " du " & oRst0.Fields("dtCrea") 'Ouvre un recordset sur les clients If strFiltreallpub = Empty Then Set oRst1 = oDB.OpenRecordset("SELECT mail1 FROM Tb_contacts") Else Set oRst1 = oDB.OpenRecordset("SELECT mail1 FROM Tb_contacts WHERE" & strFiltreallpub) End If 'Boucle sur chaque client et les ajoute au champ BCC du mail While Not oRst1.EOF strTo = strTo & oRst1.Fields("mail1") & "; " oRst1.MoveNext Wend 'Supprime la dernière virgule oMail.BCC = Left(strTo, Len(strTo) - 2) oMail.To = "Mailling-list@maboite.fr" 'Envoi du mail oMail.Save 'oMail.Display 'oRst0.Close oRst1.Close Set oRst0 = Nothing Set oRst1 = Nothing Set oDB = Nothing 'Ferme Outlook 'oApp.Quit Set oApp = Nothing MsgBox "Le mail à été placé dans le dossier brouillons de votre outlook", vbInformation Else Dim stAppName As String stAppName = "C:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.EXE" Call Shell(stAppName, 1) Dim i As Long DoEvents 'cette boucle sert à créer une attente entre les deux affectations For i = 1 To 1000000000 Next 'Instancie Outlook Set oDB = CurrentDb Set oApp = CreateObject("Outlook.Application") 'Crée un nouveau message 'sqlMail = "SELECT * FROM tblMessage;" 'Set oRst0 = oDB.OpenRecordset(sqlMail) 'oRst0.MoveLast Set oMail = oApp.CreateItem(olMailItem) oMail.Body = "Tapez votre message ici" 'oMail.Body = oRst0.Fields("txtcorps") oMail.Subject = "MAILLING : Tapez le sujet du message" 'oRst0.Fields("strObjet") & " du " & oRst0.Fields("dtCrea") 'Ouvre un recordset sur les clients If strFiltreallpub = Empty Then Set oRst1 = oDB.OpenRecordset("SELECT mail1 FROM Tb_contacts") Else Set oRst1 = oDB.OpenRecordset("SELECT mail1 FROM Tb_contacts WHERE" & strFiltreallpub) End If 'Boucle sur chaque client et les ajoute au champ BCC du mail While Not oRst1.EOF strTo = strTo & oRst1.Fields("mail1") & "; " oRst1.MoveNext Wend 'Supprime la dernière virgule oMail.BCC = Left(strTo, Len(strTo) - 2) oMail.To = "Mailling-list@maboite.fr" 'Envoi du mail oMail.Save 'oMail.Display 'oRst0.Close oRst1.Close Set oRst0 = Nothing Set oRst1 = Nothing Set oDB = Nothing 'Ferme Outlook 'oApp.Quit Set oApp = Nothing MsgBox "Le mail à été placé dans le dossier brouillons de votre outlook", vbInformation End If End Sub
Partager