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.