Bonjour à tous,
Depuis un bon moment je cherche en vain une solution à mon problème, n'ayant pas trouver, je demande votre aide. (Je précise que je débute)

Voilà je cherche à écrire une procédure sous VBA Access, permettant une recherche multicritères sur plusieurs tables.
Qui doit envoyer le résultat d'une requête sélection dans une listbox d'un formulaire.
Problème, j'ai vu qu'on ne peut pas utiliser la commande docmd.Runsql pour une requête sélection.
Voici le code SQL de la requête qui par ailleurs fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT [Liste domaines].Domaine, [Table générale].[Intitulé de l'affaire], [Table générale].[Nature de la Tâche], [Table générale].[Date de la commande], [Table générale].[Date à laquelle  la tâche doit être réalisée], [Table générale].[Travail en binome], [Listes Agent 1].[Prénom des agents] AS Agents, [Etat d'avancement].[Etat d'avencement], [Table générale].[Suivi de l'activité]
FROM [Listes Agent 1] INNER JOIN ([Liste domaines] INNER JOIN ([Liste Agents 2] INNER JOIN ([Etat d'avancement] INNER JOIN [Table générale] ON [Etat d'avancement].N° = [Table générale].[Etat d'avancement]) ON [Liste Agents 2].N° = [Table générale].[Agent 2]) ON [Liste domaines].N° = [Table générale].Domaine) ON [Listes Agent 1].N° = [Table générale].[Agent 1];
Voici le code VBA du formulaire : message d'erreur au niveau SQL="docmd.runSQL.....

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
Private Sub RefreshRequery()      'Procédure Moteur de recherche
Dim SQL As String                 'SQL désigne en fait la variable qui reçoit la requête
SQL = "DoCmd.RunSQL("SELECT [Liste domaines].Domaine, [Table générale].[Intitulé de l'affaire], [Table générale].[Nature de la Tâche], [Table générale].[Date de la commande], [Table générale].[Date à laquelle  la tâche doit être réalisée], [Table générale].[Travail en binome], [Listes Agent 1].[Prénom des agents] AS Agents, [Etat d'avancement].[Etat d'avencement], [Table générale].[Suivi de l'activité] FROM [Listes Agent 1] INNER JOIN ([Liste domaines] INNER JOIN ([Liste Agents 2] INNER JOIN ([Etat d'avancement] INNER JOIN [Table générale] ON [Etat d'avancement].N° = [Table générale].[Etat d'avancement]) ON [Liste Agents 2].N° = [Table générale].[Agent 2]) ON [Liste domaines].N° = [Table générale].Domaine) ON [Listes Agent 1].N° = [Table générale].[Agent 1];")"
If Me.chkNoms Then
   SQL = SQL & "And Listes Agent 1!Prenom des agents like '*& Me.cmbRechNoms &*'"
End If
If Me.chkDomaines Then
   SQL = SQL & "And Liste domaines!Domaine like '*& Me.cmbRechDomaines &*'"
End If
If Me.chkAvancement Then
    SQL = SQL & "And Etat d'avancement!Etat d'avencement like '*& Me.cmbRechAvancement &*'"
End If
SQL = SQL & ";"
Me.lstRésultats.RowSource = SQL
Me.lstRésultats.Requery
End Sub
 
Private Sub cmbRechAvancement_BeforeUpdate(Cancel As Integer)
Me.cmbRechAvancement.Visible = Not Me.cmbRechAvancement.Visible
RefreshRequery
End Sub
 
Private Sub chkNoms_Click()
Me.cmbRechNoms.Visible = Not Me.cmbRechNoms.Visible
RefreshRequery
 
End Sub
 
Private Sub chkDomaines_Click()
Me.cmbRechDomaines.Visible = Not Me.cmbRechDomaines.Visible
RefreshRequery
 
End Sub
 
Private Sub chkAvancement_Click()
Me.cmbRechAvancement.Visible = Not Me.cmbRechAvancement.Visible
RefreshRequery
 
End Sub
 
Private Sub cmbRechNoms_BeforeUpdate(Cancel As Integer)
Me.cmbRechNoms.Visible = Not Me.cmbRechNoms.Visible
RefresRequery
End Sub
 
Private Sub cmbRechDomaines_BeforeUpdate(Cancel As Integer)
Me.cmbRechDomaines.Visible = Not Me.cmbRechDomaines.Visible
RefreshRequery
End Sub
Merci d'avance pour votre aide.