Bonjour à tous,
Je suis relativement novice en Acess/VBA et me voici confronté à un problème.
Contexte simple : j'ai à disposition une table Villes, une table Département et une table Contacts.
J'ai créé mes relations qui fonctionnent bien, ai créé un formulaire qui demande la sélection du département dans un premier temps, puis de la ville (en fonction du département) dans un second temps, ça marche (ajout évenement sur changement : actualiser enregistrement, dans les propriétés).
Mon but désormais est de récupérer les mails en fonction des critères prédéfinis par les listes déroulantes ci-dessus.
J'ai donc créé une nouvelle liste, dans mon formulaire, avec comme contenu une requête de ce type, qui marche, puisque je récupère bien les bons mails :
Mon problème est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Contacts.Courriel FROM (Departement INNER JOIN Villes ON Departement.NumDepartement = Villes.NumDepartement) INNER JOIN Contacts ON Villes.NomVille = Contacts.Ville WHERE (((Villes.NomVille)=[Formulaires]![Formulaire_Sortie]![Ville]) AND ((Departement.NumDepartement)=[Formulaires]![Formulaire_Sortie]![Departement]));
J'aimerai ajouter un bouton d'envoi mail, qui sélectionne la liste des destinataires en fonction des critères choisis (soit directement via la zone liste definie précédemment, soit par une requête créée à part).
J'ai donc créé une requête Requête_Mail qui reprends le code ci dessus, l'ai éxécuté, fonctionne.
En revanche, quand je fais appel à cette requête dans mon bouton de commande, dans le code VBA suivant, je me retrouve confronté faca à une erreur :
Le problème vient évidemment de :
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 Private Sub Commande7_Click() Dim oOutlook As Outlook.Application Dim oEmailItem As MailItem Dim rs As Recordset Dim recipientList As String If oOutlook Is Nothing Then Set oOutlook = New Outlook.Application End If Set oEmailItem = oOutlook.CreateItem(olMailItem) With oEmailItem Set rs = CurrentDb.OpenRecordset("SELECT Courriel FROM Requête_Mail") If rs.RecordCount > 0 Then rs.MoveFirst Do Until rs.EOF If IsNull(rs!Courriel) Then rs.MoveNext Else recipientList = recipientList & rs!Courriel & ";" .To = recipientList rs.MoveNext End If Loop Else MsgBox "Personne n'a d'adresse mail" End If Set rs = Nothing .CC = "" .Subject = "Test" .Display End With Set oEmailItem = Nothing Set oOutlook = Nothing End Sub
Je suppose que Requête_Mail ne renvoit rien car dépends de la sélection des zones déroulantes du formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rs = CurrentDb.OpenRecordset("SELECT Courriel FROM Requête_Mail")
Dans le doute, j'ai bêtement testé dans le code VBA du bouton, même erreur :
Pour être sur que ce code/bouton fonctionne correctement, j'ai remplacé par une requête plus basique, sans critère de sélection, et c'est OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Contacts.Courriel FROM (Departement INNER JOIN Villes ON Departement.NumDepartement = Villes.NumDepartement) INNER JOIN Contacts ON Villes.NomVille = Contacts.Ville WHERE (((Villes.NomVille)=[Formulaires]![Formulaire_Sortie]![Ville]) AND ((Departement.NumDepartement)=[Formulaires]![Formulaire_Sortie]![Departement]))
Peut être y a t'il possibilité de directement récupérer les adresses mails de la zone de liste au lieu de passer par une requête créée en dehors du formulaire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rs = CurrentDb.OpenRecordset("SELECT Courriel FROM Contacts")
De type Me.ListBox (désolé je suis novice et ne connait pas les bons attributs).
D'avance merci,
Antoine
Partager