Cas:
Pour les PME, du fait que Access 2007 ne peut pas prendre directement en compte la gestion des E_Mails avec Outlook Express via VBA, il me fallait trouver une solution me permettant au moins d'automatiser partiellement la sélection des destinataire.

Dans mon cas, ces destinataires sont en plusieurs langues (donc au moins un message par langue), et en fonction de l'appareil qu'ils possèdent (pas le même texte de message pour celui qui a une voiture que pour celui qui a une bicyclette), et encore subdivisés par clients finaux ou revendeurs.

Une des solutions possibles:
L'idée était dans ce cas de créer un formulaire ayant une large zone de texte, dans laquelle s'afficheraient les adresses e-mail des personnes concernées.

Puis, une fois le corps du message Outlook Express tapé, simplement de copier/coller le contenu de la zone de texte dans la partie Destinataire, CC, ou CCI du message Outlook Express.

C'est certes une solution agricole ... mais cela fonctionne, un grand merci à Pierre Fauconnier qui m'a trouvé le bon moyen de gérer cela.

Je pense donc utile d'ajouter cette solution ici, d'autres pouvant avoir le même problème.

Méthode:
1 - Créez d'abord une requête indépendante, qui va sélectionner dans vos diverses tables, l'ensemble des personnes concernées, incluant l'adresse e-mail. N'oubliez pas d'éliminer ceux qui n'ont pas d'e-mail, et ceux qui ne souhaitent pas en reçevoir.

Cette requête se base sur l'ensemble des clients. Et triez la sur vos différents critères dans l'ordre.

2 - Créez un formulaire indépendant, comprenant la sélection de vos critères, une large zone de texte, un compteur, et un bouton permettant d'activer dynamiquement la recherche. Pourquoi dynamiquement ? Parce que je veux pouvoir faire les différents textes de mes messages et leurs envois dans la foulée.

3 - Bouton Sur Clic:
Ce bouton, sur l'événement Sur Clic, ira chercher une procédure VBA, dont voici le code possible, à adapter selon vos besoins:
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
Option Compare Database
Option Explicit
 
Private Sub MonBouton_Click() ' Sur Clic du bouton...
Me.MonCompteurAffichage.Visible = False '... cacher le compteur
Me.MonCompteurTexteAffichage.Visible = False ' ... cacher le texte du compteur
ML_List = "" ' ... remettre à zéro ma zone de texte résultante
Dim rs As DAO.Recordset ' ... créer un recordset spécifique
Dim Sql As String ' .... préparer un SQL
Dim MonMailPrecedent ' ... travail pour stocker la dernière adresse e-mail
Dim MonMailActuel ' ... travail pour stocker l'adresse e-mail actuelle
Dim MonCompteur As Integer ' ... compteur pour connaître le Nb d'enregistrements concernés
MonMailPrecedent = " " ' .... initialisation 
MonMailActuel = " " ' ... initialisation
MonCompteur = 0 ' ... initialisation
' ... préparartion de la requete dynamique en fonction de mes critères
Sql = "SELECT * FROM MaRequeteOriginale WHERE MonChampRequeteDynamique1 LIKE '*" & Me.MaConditionSelectionnee1.Value & "*'"
If Me.MaConditionSelectionnee2.Value <> "MaConditionSelectionnee2Exception" Then Sql = Sql & "AND MonChampRequeteDynamique2 LIKE '*" & Me.MaConditionSelectionnee2.Value & "*'"
If Me.MaConditionSelectionnee3.Value <> "MaConditionSelectionnee3Exception" Then Sql = Sql & "AND MonChampRequeteDynamique3 LIKE '*" & Me.MaConditionSelectionnee3.Value & "*'"
Sql = Sql & "ORDER BY MaRequeteOriginaleCHampEMail"
' ... etc ...
Set rs = CurrentDb.OpenRecordset(Sql) ' ... exécuter equete dynamique
Do While Not rs.EOF
    MonMailActuel = rs.Fields("MaRequeteOriginaleCHampEMail") ' ... charger mail lu
    If MonCompteur > 0 And MonMailActuel = MonMailPrecedent Then GoTo Suite_1 ' ... éviter doublons d'adresse e-mail
    ML_List = ML_List & rs.Fields("MaRequeteOriginaleCHampEMail") & "; " ' ... ajouter l'e-mail à la zone de texte
    W_Cnt = W_Cnt + 1 ' ... incrémenter le compter
Suite_1:
    MonMailPrecedent = MonMailActuel '... permuter les précédents/actuels
    rs.MoveNext
    Loop
Me.MonCompteurAffichage = MonCompteur
Me.MonCompteurAffichage.Visible = True '... rendre le compteur visible
Me.MonCompteurTexteAffichage.Visible = True '... ainsi que son texte
End Sub
 
Private Sub Form_Load()
' au chargement du formulaire, rendre le compteur et son affichage invisibles
Me.EM_Cnt.Visible = False
Me.EM_Cnt_Txt.Visible = False
End Sub
Résultat:
Une fois effectué le travail, avec le curseur, vous sélectionnez le contenu de votre zone de texte, et le copiez simplement dans la zone destinataire, CC ou CCI de votre message, et l'envoyez.

Le cas échéant, le compteur vous permet de ne copier qu'un certain nombre d'adresses e-mail à la fois si ce nombre excède un nombre... laissé à votre appréciation

C'est moins rapide qu'un tout automatique... mais nettement plus que rien du tout