Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2011, 18h10   #1
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Par défaut Requête dynamique multi-critères dans un sous-formulaire

Bonjour,

Je coince sur une requête liée à 1 champ (obligatoire) du formulaire entête et 3 champs (facultatifs) du sous-formulaire

Dans mon sous-formulaire, j'ai une liste déroulante qui me permet de sélectionner un article. Je peux remplir au choix 3 autres champs (CmbFabr, CmbF1, CmbF2) qui me permettent de filtrer les articles

Code :
1
2
3
4
5
6
7
8
9
10
11
<s>SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2
FROM TblArticle
WHERE (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbfabr]) AND ((TblArticle.arfiltre1)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf1]) AND ((TblArticle.arfiltre2)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf2])) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbfabr]) AND ((TblArticle.arfiltre1)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf1]) AND ((TblArticle.arfiltre2) Is Null)) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbfabr]) AND ((TblArticle.arfiltre1) Is Null) AND ((TblArticle.arfiltre2)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf2])) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbfabr]) AND ((TblArticle.arfiltre1) Is Null) AND ((TblArticle.arfiltre2) Is Null)) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr) Is Null) AND ((TblArticle.arfiltre1)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf1]) AND ((TblArticle.arfiltre2)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf2])) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr) Is Null) AND ((TblArticle.arfiltre1)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf1]) AND ((TblArticle.arfiltre2) Is Null)) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr) Is Null) AND ((TblArticle.arfiltre1) Is Null) AND ((TblArticle.arfiltre2)=[Forms]![FrmEnsembleEnt]![FrmEnsembleDet]![cmbf2])) 
OR (((TblArticle.arcat)=[Forms]![FrmEnsembleEnt]![eecat]) AND ((TblArticle.arfabr) Is Null) AND ((TblArticle.arfiltre1) Is Null) AND ((TblArticle.arfiltre2) Is Null))
ORDER BY TblArticle.ardesc;</s>
Je suis pourtant sûr d'avoir mentionné toutes les possibilités mais ma requête ne fonctionne que si j'ai complété les 3 champs

Je tourne en rond !

Merci d'avance pour votre aide
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 14h37   #2
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Précision :
J'ai désormais 4 listes déroulantes dans l'entête de mon sous-formulaire qui me permettent de filtrer mon champ description mais je n'y arrive toujours pas

Code :
1
2
3
4
<s>SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2 FROM TblArticle WHERE (((TblArticle.arcat)=Forms!FrmKitEnt!FrmKitDet!CmbCat) And ((TblArticle.arfabr)=Forms!FrmKitEnt!FrmKitDet!CmbFabr) And ((TblArticle.arfiltre1)=Forms!FrmKitEnt!FrmKitDet!CmbF1) And ((TblArticle.arfiltre2)=Forms!FrmKitEnt!FrmKitDet!CmbF2)) 
Or (((TblArticle.arcat)=Forms!FrmKitEnt!FrmKitDet!CmbCat) And ((TblArticle.arfabr)=Forms!FrmKitEnt!FrmKitDet!CmbFabr) And ((TblArticle.arfiltre1)=Forms!FrmKitEnt!FrmKitDet!CmbF1) And ((TblArticle.arfiltre2) Is Null)) 
Or (((TblArticle.arcat)=Forms!FrmKitEnt!FrmKitDet!CmbCat) And ((TblArticle.arfabr)=Forms!FrmKitEnt!FrmKitDet!CmbFabr) And ((TblArticle.arfiltre1) Is Null) And ((TblArticle.arfiltre2) Is Null)) 
Or (((TblArticle.arcat)=Forms!FrmKitEnt!FrmKitDet!CmbCat) And ((TblArticle.arfabr) Is Null) And ((TblArticle.arfiltre1) Is Null) And ((TblArticle.arfiltre2) Is Null)) Or (((TblArticle.arcat) Is Null) And ((TblArticle.arfabr) Is Null) And ((TblArticle.arfiltre1) Is Null) And ((TblArticle.arfiltre2) Is Null)) ORDER BY TblArticle.ardesc, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2;</s>
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2011, 15h35   #3
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
J'ai finalement trouvé la solution à mon problème en exploitant la propriété rowsource
Je laisse le code pour celles et ceux que ça intéresserait :
Code :
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
64
65
66
67
Private Sub CmbCat_AfterUpdate()
Dim StrSql As String
Dim StrTri As String
StrTri = " ORDER BY TblArticle.ardesc;"
StrSql = "SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2 FROM TblArticle"
If Not IsNull(Me.ActiveControl) Then
    If IsNull(Me.StrCritere) Then
    StrCritere = " WHERE TblArticle.arcat=" & Chr(34) & Me.CmbCat & Chr(34)
    Else
    StrCritere = StrCritere & " AND TblArticle.arcat=" & Chr(34) & Me.CmbCat & Chr(34)
    End If
    StrSql = StrSql & StrCritere
End If
StrSql = StrSql & StrTri
Me.eddesc.RowSource = StrSql
End Sub
 
Private Sub CmbF1_AfterUpdate()
Dim StrSql As String
Dim StrTri As String
StrTri = " ORDER BY TblArticle.ardesc;"
StrSql = "SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2 FROM TblArticle"
If Not IsNull(Me.ActiveControl) Then
    If IsNull(Me.StrCritere) Then
    StrCritere = " WHERE TblArticle.arfiltre1=" & Chr(34) & Me.CmbF1 & Chr(34)
    Else
    StrCritere = StrCritere & " AND TblArticle.arfiltre1=" & Chr(34) & Me.CmbF1 & Chr(34)
    End If
    StrSql = StrSql & StrCritere
End If
StrSql = StrSql & StrTri
Me.eddesc.RowSource = StrSql
End Sub
 
Private Sub CmbF2_AfterUpdate()
Dim StrSql As String
Dim StrTri As String
StrTri = " ORDER BY TblArticle.ardesc;"
StrSql = "SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2 FROM TblArticle"
If Not IsNull(Me.ActiveControl) Then
    If IsNull(Me.StrCritere) Then
    StrCritere = " WHERE TblArticle.arfiltre2=" & Chr(34) & Me.CmbF2 & Chr(34)
    Else
    StrCritere = StrCritere & " AND TblArticle.arfiltre2=" & Chr(34) & Me.CmbF2 & Chr(34)
    End If
    StrSql = StrSql & StrCritere
End If
StrSql = StrSql & StrTri
Me.eddesc.RowSource = StrSql
End Sub
 
Private Sub CmbFabr_AfterUpdate()
Dim StrSql As String
Dim StrTri As String
StrTri = " ORDER BY TblArticle.ardesc;"
StrSql = "SELECT TblArticle.ardesc, TblArticle.arref, TblArticle.arprix, TblArticle.arcat, TblArticle.arfabr, TblArticle.arfiltre1, TblArticle.arfiltre2 FROM TblArticle"
If Not IsNull(Me.ActiveControl) Then
    If IsNull(Me.StrCritere) Then
    StrCritere = " WHERE TblArticle.arfabr=" & Chr(34) & Me.CmbFabr & Chr(34)
    Else
    StrCritere = StrCritere & " AND TblArticle.arfabr=" & Chr(34) & Me.CmbFabr & Chr(34)
    End If
    StrSql = StrSql & StrCritere
End If
StrSql = StrSql & StrTri
Me.eddesc.RowSource = StrSql
End Sub
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h42.


 
 
 
 
Partenaires

Hébergement Web