IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête dynamique multi-critères dans un sous-formulaire [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    631
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2011
    Messages : 631
    Points : 360
    Points
    360
    Par défaut
    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 : 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
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer Dynamiquement un controle dans un sous Formulaire
    Par Nabil54 dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/04/2013, 03h47
  2. Réponses: 7
    Dernier message: 04/04/2007, 16h34
  3. Réponses: 1
    Dernier message: 10/01/2007, 14h24
  4. Requête filtrée dans des sous-formulaires
    Par Beavis Man dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/12/2006, 23h31
  5. Aperçu dynamique d'un état dans un sous formulaire
    Par aCe_GiK dans le forum Access
    Réponses: 4
    Dernier message: 18/04/2006, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo