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

VBA Access Discussion :

recherche Multicriteres [VBA] [SQL]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 32
    Points
    32
    Par défaut recherche Multicriteres [VBA] [SQL]
    Bonjour,

    J’ai trouvé un tuto sur la recherche multicritères de cafeine.
    J’ai réussis à faire son exemple pour une table, mais j’aimerais le faire pour plusieurs tables.

    J’ai donc plusieurs tables, Capteurs, Critères, Fabricants, Forme … Je coince un peu sur sa méthode RefreshQuery()
    voila l'original:

    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
    Dim SQL As String
     Dim SQLWhere As String
     
     SQL = "SELECT CodMedia, Titre, Auteur, Famille, Type FROM Medias Where Medias!CodMedia <> 0 "
     If Me.chkAuteur Then
        SQL = SQL & "And Medias!Auteur like '*" & Me.txtRechAuteur & "*' "
     End If
     If Me.chkFamille Then
        SQL = SQL & "And Medias!Famille = '" & Me.cmbRechFamille & "' "
     End If
     If Me.chkResume Then
        SQL = SQL & "And Medias!Résumé like '*" & Me.txtRechResume & "*' "
     End If
     If Me.chkTitre Then
        SQL = SQL & "And Medias!Titre like '*" & Me.txtRechTitre & "*' "
     End If
     If Me.chkType Then
        SQL = SQL & "And Medias!Type = '" & Me.cmbRechType & "' "
     End If
     
     SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     SQL = SQL & ";"
     
     Me.lblStats.Caption = DCount("*", "Medias", SQLWhere) & " / " & DCount("*", "Medias")
     Me.lstResults.RowSource = SQL
     Me.lstResults.Requery

    Donc étant donné que j’ai plusieurs tables et que mes critères sont sur ses tables je voulais savoir comment écrire le SQL ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    J’avais pensé a SQL = "SELECT Capteurs.Nom_Cap, Criteres.Types, Fabricant.Nom_Fab mais au FROM ... "
    je ne sais pas quoi mettre apres le FROM et je ne sais pas non plus comment faire pour mes conditions (if)
    Si quelqu’un pouvait m’aider un peu

    Merci d’avance

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,
    personne n'a d'idees?
    Si.....pleins d'idées....et de solutions....qui parfois se trouve en faisant quelques recherches dans les anciens post du Forum [Fonction Recherche, dans le bandeau situé en haut de chaque page]......

    Ici, peut-être une solution:
    http://www.developpez.net/forums/sho...e+multicritere

    Bonne recherche....et bonne lecture......

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Super merci de ton aide , je test ca

    pourtant j'avais cherché dans les anciens posts

    j'ai donc eté voir sur l'autre post mais je ne comprend pas (dans l'exemple il y a un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim RS as DAO.RecordSet
    mais moi le DAO.RecordSet il est non reconnu


    je me permets donc de mettre mon code :


    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    Private Sub ClickCap_Click()
     
    If Me.ClickCap Then
        Me.MenuCap.Visible = False
    Else
        Me.MenuCap.Visible = True
    End If
     
    RefreshQuery
    End Sub
     
    Private Sub ClickCrite_Click()
     
    If Me.ClickCrite Then
        Me.MenuCrit.Visible = False
    Else
        Me.MenuCrit.Visible = True
    End If
     
    'RefreshQuery
    End Sub
     
    Private Sub ClickEntenduMesure_Click()
    If Me.ClickEntenduMesure Then
        Me.MenuEtendueMesure.Visible = False
    Else
        Me.MenuEtendueMesure.Visible = True
    End If
     
    'RefreshQuery
    End Sub
     
    Private Sub ClickFab_Click()
     
    If Me.ClickFab Then
        Me.menuFab.Visible = False
    Else
        Me.menuFab.Visible = True
    End If
     
    'RefreshQuery
    End Sub
     
    Private Sub ClickFonc_Click()
     
    If Me.ClickFonc Then
        Me.menuFonc.Visible = False
    Else
        Me.menuFonc.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickForme_Click()
     
    If Me.ClickForme Then
        Me.menuForme.Visible = False
    Else
        Me.menuForme.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickMinMax_Click()
    If Me.ClickMinMax Then
        Me.menuMinMax.Visible = False
    Else
        Me.menuMinMax.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickPression_Click()
    If Me.ClickPression Then
        Me.menuPression.Visible = False
    Else
        Me.menuPression.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickPyro_Click()
    If Me.ClickPyro Then
        Me.MenuPyro.Visible = False
    Else
        Me.MenuPyro.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickSens_Click()
     
    If Me.ClickSens Then
        Me.MenuElementSensible.Visible = False
    Else
        Me.MenuElementSensible.Visible = True
    End If
     
    'RefreshQuery
    End Sub
     
    Private Sub ClickSign_Click()
     
    If Me.ClickSign Then
        Me.MenuSign.Visible = False
    Else
        Me.MenuSign.Visible = True
    End If
    'RefreshQuery
    End Sub
     
    Private Sub ClickTypeMesure_Click()
     
    If Me.ClickTypeMesure Then
        Me.MenuTypeMesure.Visible = False
    Else
        Me.MenuTypeMesure.Visible = True
    End If
    'RefreshQuery
     
    End Sub
     
    Private Sub Form_Load()
    Dim ctl As Control
     
    For Each ctl In Me.Controls
        Select Case Left(ctl.Name, 3)
            Case "cli"
                ctl.Value = -1
            Case "lbl"
                ctl.Caption = "- * - * -"
            Case "men"
                ctl.Visible = False
        End Select
    Next ctl
     
     
    End Sub
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
     
    SQL = "SELECT Capteurs.Nom_Cap as Key_Cap, Criteres.Types as Key_Crit  FROM Criteres INNER JOIN Capteurs ON Criteres.Key_Crit=Capteurs.Val_Crit "
     
    If Not Me.ClickCap Then
        SQL = SQL & "And Capteurs.Nom_Cap like '" & Me.MenuCap & "' "
    End If
     
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lblStats.Caption = DCount("*", "Capteurs", SQLWhere) & " / " & DCount("*", "Capteurs")
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
     
    Private Sub MenuCap_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuCrit_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuElementSensible_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuEtendueMesure_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub menuFab_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub menuFonc_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub menuForme_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub menuMinMax_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub menuPression_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuPyro_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuSign_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub
     
    Private Sub MenuTypeMesure_BeforeUpdate(Cancel As Integer)
    RefreshQuery
    End Sub

    juste pour info quand je lance l'application je vois bien mon tableau, dans LstResult -> contenu j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Capteurs.Nom_Cap, Criteres.Types, Element_Sensible.Elem_Sensi, Etendue_Mesure.Val_entendue_mesure, Fabricants.Nom_fab, Fonctionnement.Type_Fonct, Forme.Forme, Mesure_Etendue_MM.Val_mm, Signal_Sortie.Type_signal_sortie, Type_Mesure.Nom_Type_Mesure, Type_Pression.Type_Pression, Type_Pyro.Type_Pyro FROM Type_Pyro INNER JOIN (Type_Pression INNER JOIN (Type_Mesure INNER JOIN (Signal_Sortie INNER JOIN (Mesure_Etendue_MM INNER JOIN (Forme INNER JOIN (Fonctionnement INNER JOIN (Fabricants INNER JOIN (Etendue_Mesure INNER JOIN (Element_Sensible INNER JOIN (Criteres INNER JOIN Capteurs ON Criteres.Key_Crit=Capteurs.Val_Crit) ON Element_Sensible.Key_Sensi=Capteurs.Val_Sensi) ON Etendue_Mesure.Key_entendue_mesure=Capteurs.Val_entendue_mesure) ON Fabricants.Key_fab=Capteurs.Val_fab) ON Fonctionnement.Key_Fonct=Capteurs.Val_Fonct) ON Forme.Key_Forme=Capteurs.Val_Forme) ON Mesure_Etendue_MM.key_eten_mm=Capteurs.Val_eten_mm) ON Signal_Sortie.Key_signal=Capteurs.Val_signal) ON Type_Mesure.Key_type_mesure=Capteurs.Val_type_mesure) ON Type_Pression.Key_Press=Capteurs.Val_Press) ON Type_Pyro.Key_Pyro=Capteurs.Val_Pyro ORDER BY Capteurs.Nom_Cap;
    et ca marche super bien, si quelqu'un pouvait me dire comment bien faire mon RefreshQuery()


    Merci d'avance.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    j'espere que j'ai pas decouragé les plus courageux avec mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Capteurs.Nom_Cap, Criteres.Types, Element_Sensible.Elem_Sensi, Etendue_Mesure.Val_entendue_mesure, Fabricants.Nom_fab, Fonctionnement.Type_Fonct, Forme.Forme, Mesure_Etendue_MM.Val_mm, Signal_Sortie.Type_signal_sortie, Type_Mesure.Nom_Type_Mesure, Type_Pression.Type_Pression, Type_Pyro.Type_Pyro FROM Type_Pyro INNER JOIN (Type_Pression INNER JOIN (Type_Mesure INNER JOIN (Signal_Sortie INNER JOIN (Mesure_Etendue_MM INNER JOIN (Forme INNER JOIN (Fonctionnement INNER JOIN (Fabricants INNER JOIN (Etendue_Mesure INNER JOIN (Element_Sensible INNER JOIN (Criteres INNER JOIN Capteurs ON Criteres.Key_Crit=Capteurs.Val_Crit) ON Element_Sensible.Key_Sensi=Capteurs.Val_Sensi) ON Etendue_Mesure.Key_entendue_mesure=Capteurs.Val_entendue_mesure) ON Fabricants.Key_fab=Capteurs.Val_fab) ON Fonctionnement.Key_Fonct=Capteurs.Val_Fonct) ON Forme.Key_Forme=Capteurs.Val_Forme) ON Mesure_Etendue_MM.key_eten_mm=Capteurs.Val_eten_mm) ON Signal_Sortie.Key_signal=Capteurs.Val_signal) ON Type_Mesure.Key_type_mesure=Capteurs.Val_type_mesure) ON Type_Pression.Key_Press=Capteurs.Val_Press) ON Type_Pyro.Key_Pyro=Capteurs.Val_Pyro ORDER BY Capteurs.Nom_Cap;
    merci d'avance pour les tuyaux

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    j'ai un peu avancé, j'arrive a afficher mes donnees selon deux criteres, mais je bloque pour 3 criteres. Voila mon code pour 2 criteres :

    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
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
    Dim SQL2 As String
    Dim RS As DAO.Recordset
     
     
    SQL = "SELECT Capteurs.Nom_Cap as Key_Cap, Criteres.Types as Key_Crit FROM Criteres INNER JOIN Capteurs ON Criteres.Key_Crit=Capteurs.Val_Crit "
    SQL2 = "SELECT Count(*) AS Cnt FROM Criteres INNER JOIN Capteurs ON [Criteres].[Key_Crit]=[Capteurs].[Key_Cap] "
    SQLWhere = "WHERE [Capteurs].[Key_Cap]<>0 "
     
     
    If Not Me.ClickCap Then
        SQLWhere = SQLWhere & "And Capteurs.Nom_Cap like '" & Me.MenuCap & "' "
    End If
    If Not Me.ClickCrite Then
        SQLWhere = SQLWhere & "And Criteres.Types like '" & Me.MenuCrit & "' "
    End If
     
     
     
    SQL = SQL & SQLWhere & ";"
    SQL2 = SQL2 & SQLWhere & ";"
    Set RS = CurrentDb.OpenRecordset(SQL2)
     
     
    Me.lblStats.Caption = RS!Cnt & " / " & DCount("*", "[Capteurs]")
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub
    je suppose que pour 3 criteres il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT Capteurs.Nom_Cap as Key_Cap, Criteres.Types as Key_Crit,Fabricants.Nom_fab as Key_fab FROM Criteres INNER JOIN Capteurs ON Criteres.Key_Crit=Capteurs.Val_Crit "
    Mais que mettre derriere le FROM ? et pour SQL2

    Merci d'avance pour votre aide

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    c'est bon j'ai reussi en faissant une requete

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

Discussions similaires

  1. [AC-2010] Creation d'etat à partir d'une recherche multicriteres VBA
    Par phoenix974 dans le forum IHM
    Réponses: 7
    Dernier message: 15/12/2013, 15h42
  2. recherche multicritere java-> sql
    Par crofteur dans le forum JDBC
    Réponses: 5
    Dernier message: 04/10/2007, 14h12
  3. vba access recherche multicritere
    Par alsimbad dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2007, 12h34
  4. [VBA-SQL] Recherche sur *nom*
    Par GarsDuCalvados dans le forum Access
    Réponses: 13
    Dernier message: 22/02/2007, 11h17
  5. [VBA SQL] rechercher si un pattern est inclu dans un autre
    Par Nenette_cherie dans le forum Access
    Réponses: 4
    Dernier message: 28/04/2006, 09h05

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