Bonjour à tous,
J'ai lu quelques articles sur l'envoi d'email, et je suis presque arrivé à mes fins mais j'ai quelques erreurs dans mon code qui font que mes infos de requêtes ne sont pas toutes transmises.
Mes erreurs proviennent très certainement du fait que j'ai mélangé des infos de plusieurs articles mais je ne vois plus comment m'en sortir...
J'ai une table T_Clients contenant entres autres [Civilité], [Nom], [Prénom], [Ville], [Téléphone], [Email], [Date_Naissance] (et bien entendu un [ID_Client] en primaire et auto).
J'ai une requête R_Anniv_C contenant les champs décrits ci dessus sauf l'ID_Client. J'ai également un champs calculé: Date JJMM: [Format([Anniversaire_C];"jj/mm")] avec critère: Format(Date()+2;"jj/mm")
J'ai un formulaire basé sur la requête qui s'ouvre via macro autoexec avec un peu de code pour que celui ci ne s'ouvre QUE si il y a des lignes contenues dans la requête.
Dans ce formulaire, j'ai un bouton avec le lequel je souhaite envoyer un mail type aux clients qui ont leurs anniversaires; voici le code (partiellement faux) correspondant à ce que je souhaite faire:
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 Option Compare Database Public Sub SendMail(ByVal strEmail As String, _ ByVal strObj As String, _ ByVal strMsg As String, _ ByVal blnEdit As Boolean) On Error Resume Next DoCmd.SendObject acSendNoObject, , , strEmail, , , strObj, strMsg, blnEdit End Sub Public Sub BtnEmailAnniv_Click() Dim strDest As String ' L'adresse e-mail des destinataires Dim strMessage As String ' Le corps du message Dim rst As DAO.Recordset Dim strSQL As String Dim strTitre As String Dim strMsg As String ' Titre du message strTitre = "Joyeux anniversaire" ' Création du corps du message strMessage = "Bonjour {Civilité} {Nom} {Prénom}," _ & vbCrLf & "Le {Date_JJMM} Bla bla bla" _ & vbCrLf & "re blab bla bla..." _ & vbCrLf & vbCrLf & "Signature" ' Ouverture de la requête strSQL = "SELECT * FROM [R_Anniv_C]" _ & " WHERE [Email] IS NOT NULL" Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot) ' Parcourir la liste des clients While Not rst.EOF ' Construire un message personnalisé ' (on remplace chaque {...} du message par les champs de la requête strMsg = Replace(strMessage, "{Civilité}", rst("Civilité")) 'erreur(s) ici... strMsg = Replace(strMsg, "{Nom}", rst("Nom")) strMsg = Replace(strMsg, "{Prénom}", rst("Prénom")) strMsg = Replace(strMsg, "{Date_JJMM}", rst("Date_JJMM")) ' Expédier le mail SendMail rst("Email"), strTitre, strMessage, True ' Client suivant rst.MoveNext Wend ' On libère les ressources rst.Close Set rst = Nothing 'message de confirmation MsgBox "Envois effectués.", vbInformation, "Mon fichier access" End Sub Private Sub Form_Open(Cancel As Integer) If Me.RecordsetClone.RecordCount = 0 Then Cancel = True End If End Sub
Petites questions bonus:
Dans ma requête plutôt que de mettre en critère: Format(Date()+2;"jj/mm") que je traduirais par "Si date aujourd'hui + 2 = date jj/mm"; puis-je écrire quelque chose comme "Si date aujourd'hui +2 ET date aujourd'hui+1=date jj/mm"
Je suis quasiment sure que c'est possible mais je ne connais pas la syntaxe (le but étant que si un jour je n'ouvre pas mon fichier - comme un dimanche, je puisse voir le rappel le lendemain...). Ps: Evidement, je peux mettre un deuxième critère, mais je souhaite savoir la syntaxe pour & pour ma culture personnelle.
Merci.
Partager