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 :

paramétrage dynamique de requête


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut paramétrage dynamique de requête
    bonjour,
    j'ai créé un formulaire pour faire créer des requêtes. J'ai donc plusieurs critères dans ce formulaire représentés, par des zones de liste modifiables et des zones de textes.
    Le formulaire fonctionne si je rentre une valeur dans chaque zone de liste et dans chaque zone de texte. Le problème c'est que pour certains critères , je voudrais ne pas faire de recherche. Par exemple pour mon critère "sexe", je voudrais les deux. Or je ne sais pas comment faire.

    _ Tout d'abord j'ai utilisé la méthode du tutoriel sur le paramétrage dynamique de recherche, en utilisant la fonction nz. Par exemple dans mon code j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLModele = Replace(strSQLModele, "[sexe]", Chr(34) & Nz(lst_particule) & Chr(34))
    _ Ensuite, pour mes zone de listes, j'ai essayé d'utiliser la Faq pour mettre une ligne "TOUS" au début de ma liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select [Porteurs/Entrepreneurs].[particule] From (Select  [Porteurs/Entrepreneurs].[particule],1 As Position From [Porteurs/Entrepreneurs] Union  Select TOP 1 "-Tous-",0 As Position From [Porteurs/Entrepreneurs]) Order By Position
    Il s'affiche bien, mais quand je clique dessus ça ne marche pas. Ca ne séléctionne pas tous les choix de ma liste.

    Donc voilà, quelqu'un saurai-t-il sur quel code il faut que je mettes quelque chose pour selectionner tous les choix pour certains critères.
    Pour moi l'idéal serai de ne rien renseigner pour les critères où je ne veux pas faire de choix.

  2. #2
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Tu as raison, quand tu veux tout pour un critère, il suffit d'omettre ce critère dans la partie WHERE de la requête.

    Exemple : Ton formulaire a trois champs critères.
    Si tous sont renseignés : WHERE (critère1 AND critère2 AND critère3).
    Si critère1 laissé vide dans le formulaire : WHERE (critère2 AND critère3)

    Il faut contruire au fur et à mesure la chaîne de caractères entre les parenthèses.
    Supposons que c'est la string strWHERE.
    Initialisation : strWHERE=""
    Si critère1 renseigné
    ->Si strWHERE<>"" strWHERE = strWHERE & " AND "
    ->strWHERE = strWHERE + critère1
    Si critère2 renseigné
    ->Si strWHERE<>"" strWHERE = strWHERE & " AND "
    ->strWHERE = strWHERE +critère2
    Si critère3 renseigné
    ->Si strWHERE<>"" strWHERE = strWHERE & " AND "
    ->strWHERE = strWHERE + critère3

    Ajout à la requête principale "SELECT ... FROM ...." (sans WHERE).
    Si strWHERE<>"" ajouter "WHERE (" & strWHERE & ")"
    Sinon pas de WHERE du tout dans la requête (le cas où les 3 critères sont laissés vides)

    Si critère renseigné peut se traduire de différente mannières.
    Ca peut être : Nz(critère,"") <>""
    Ou : (Nz(critère,"") <>"" AND Nz(critère,"") <> "-Tous-") pour tes listes déroulantes

    J'espère t'avoir éclairé un peu.

    Bon courage.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    lol,
    j'aurai peut-être dû préciser que j'étais encore un peu débutant sur Access !
    J'ai compris le principe, après c'est au niveau des écritures je suis pas sûr. Je vais essayer ce que tu dis.
    En tout cas merci pour tout ça.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    en fait j'ai essayé ta méthode mais je sais pas ce que je dois mettre. je m'explique dans mon code du bouton valider j'ai notamment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
      strSQLModele = QryModele.SQL
    'Effectue le remplacement du critere par la valeur
    strSQLModele = Replace(strSQLModele, "[sexe]", Chr(34) & Nz(lst_particule) & Chr(34))
    strSQLModele = Replace(strSQLModele, "[choix_ville]", Chr(34) & Nz(lst_ville) & Chr(34))
      'Créer la nouvelle requête
        Db.CreateQueryDef "Liste_résultats_formulaire_de_statistiques", strSQLModele
    Donc si j'enlève mes critères de ma requête, ces lignes veulent plus rien dire ?
    Du coup, je sais pas si je dois laisser ces lignes, et je sais pas quel nom de critère mettre dans ton code.
    Je sais que j'en demande peut-être beaucoup, ms si tu pouvais me donner un exemple juste pour un critère, de ce qu'il faut écrire dans la requete et ds le code, ce srai cool.

    En fait dans le tutoriel sur le parametrage dynamique de requête, ils expliquent que la fction nz renvoie la valeur "" pour le critère dans la requête. Donc je pensais que l'on piuvais dans le code de la requête mettre quelque chose pour que si la valeur du critère est "", alors on ne l'utilise pas...
    ou peut être plutot que le critère est utilisé si ils est différent de "".
    mais je ne sais pas comment l'écrire et même je sais pas si c possible.

    parceke mon code pr le bouton il fonctionne bien avec le tutoriel. dc j'ai peur de le changer maintenant.

  5. #5
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Ok je vais te donner un exemple de code.

    Admettons qu'on a une table Clients(NumClient, Nom, Adresse, CP, Ville).
    Dans le formulaire, trois critères :
    Nom (zone de texte), CP (zone de texte), Ville (Liste)
    La requête pour selectionner tous les Clients est :
    SELECT NumClient, Nom, Adresse, CP, Ville FROM Clients

    Le code associé au bouton de recherche serai :
    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
    Dim strSELECT As String, strSQL As String
    Dim strWHERE As String
    Dim strCrit As String
    
    strSELECT = "SELECT * FROM Clients"
    
    strWHERE = ""
    
    ' Traitement Critère sur Nom
    ' Critère : Contient  (ex: LIKE '*BL*')
    strCrit = Nz([Nom], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(Nom Like '*" & strCrit & "*')"
    End If
    
    ' Traitement Critère sur Code Postal
    ' Critère : Commence par (ex: LIKE '60*')
    strCrit = Nz([CP], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(CP LIKE '" & strCrit & "*')"
    End If
    
    ' Traitement Critère sur Ville
    strCrit = Nz([Ville], "")
    If strCrit <> "" And strCrit <> "-Tous-" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(Ville = '" & strCrit & "')"
    End If
    
    If strWHERE <> "" Then
       ' Si au moins un critère défini on ajoute WHERE ... à la requête
       strSQL = strSELECT & vbCrLf & "WHERE (" & strWHERE & ")"
    Else
       ' Sinon requête sans WHERE ce qui correspond à tout selectionner
       strSQL = strSELECT
    End If
    
    Me.lstResultat.RowSource = strSQL
    Me.lstResultat.Requery
    La différence par rapport à toi, c'est que je pars pas d'une requête modèle.

    En espèrant que ça sera plus clair.
    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut ok
    Bonsoir,
    merci bcp. J'ai pourrais tester ça que lundi mais au moins là j'ai déjà compris la logique du raisonnement. En fait mon problème c'était effectivement que je partais d'une requête modèle et du coup avec le code du tutoriel je me trouvais avec trois nom possible pr les critères et j'étais perdu.
    Donc merci bien c'est cool d'avoir répondu encore une fois.
    J'espère que je pourrais mettre "Résolu" lundi prochain... ça devrait le faire je pense avoir saisi cette fois !!!

    @ bientot peut être sur le forum (de préférence pr aider quelqu'un d'autre cette fois !)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut Re
    desolé encore une tite question. J'ai finalement pu essayer avec ta méthode et simplement je ne sais pas où va le résultat après mon click sur le bouton. Rien ne s'affiche . j'ai essayé de mettre le code de la FAQ pour créer une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.CreateQueryDef("MaReqCreee", "Select * FROM Table1")
    Mais ça ne marche pas non plus, il ne se passe rien.

    je sais pas si c'est compatible avec la fin du code (Me.lstResultat.Requery).

  8. #8
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    A la fin du code tu obtiens une requête SQL.
    Dans mon exemple je m'en serts pour remplir une zone de liste, car celle-ci accepte comme source de données, un nom de table, un nom de requête, ou simplement une requête SQL.

    Tu peux sauvegarder la requête SQL en tant que requête Access comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CurrentDb.CreateQueryDef("MaReqCreee", strSQL)
    Si la requête MaReqCreee existe déja :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim qdef as DAO.QueryDef
     
    Set qdef = CurrentDb.QueryDefs("MaReqCreee")
    qdef.SQL = strSQL
    A+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    bah j'ai déjà essayé avec cet exemple de la FAQ ce matin, et j'ai bien mis strSQL. Mais ça ne marche pas chez moi.

  10. #10
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Quand tu dis que ça ne marche pas, qu'est-ce que ça veut dire exactement ?
    - La requête n'est pas modifiée ou pas créée ?
    - La requête est bien modifiée (ou créée) mais ne retourne aucune donnée ?

    Sinon, voila comment j'ai changé la fin de mon code pour qu'il affiche le résultat dans une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set qDef = Nothing  ' déclaré par Dim qDef As DAO.QueryDef en début de Sub
    ' Tentative d'ouverture de la dénition de requête "qryClients"
    On Error Resume Next
    Set qDef = CurrentDb.QueryDefs("qryClients")
    On Error GoTo 0  ' ou On Error GoTo Etiquette
    ' Si Echec on crée une nouvelle définition de  requête
    If qDef Is Nothing Then Set qDef = CurrentDb.CreateQueryDef("qryClients")
    ' Affectation de la requête SQL
    qDef.Sql = strSQL
    qDef.Close
    ' Ouverture de la requête modifiée ou créée
    DoCmd.OpenQuery "qryClients"
    Bon courage

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    bonjour et merci,

    en fait lorsque je clique sur mon boutonla requête se crée bien mais à condition de n'avoir mis que deux critères dans mon code VBA. seuls mes deux premiers critères fonctionnent et je ne comprends pas pourquoi les autres non. Par exemple cela marce ac ce 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
     
    Private Sub Commande189_Click()
    Dim qDef As DAO.QueryDef
    Dim strSELECT As String, strSQL As String
    Dim strWHERE As String
    Dim strCrit As String
     
    strSELECT = "SELECT Nom, Prénom, * FROM [Porteurs/Entrepreneurs]"
     
    strWHERE = ""
     
    ' Traitement Critère sur sexe
    strCrit = Nz([particule], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(particule = '" & strCrit & "')"
    End If
     
    ' Traitement Critère sur ville
    strCrit = Nz([Ville], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(Ville = '" & strCrit & "')"
    End If
     
    If strWHERE <> "" Then
       ' Si au moins un critère défini on ajoute WHERE ... à la requête
       strSQL = strSELECT & vbCrLf & "WHERE (" & strWHERE & ")"
    Else
       ' Sinon requête sans WHERE ce qui correspond à tout selectionner
       strSQL = strSELECT
    End If
     
    Set qDef = Nothing
    ' Tentative d'ouverture de la dénition de requête "qryClients"
    On Error Resume Next
    Set qDef = CurrentDb.QueryDefs("Stats")
    On Error GoTo 0  ' ou On Error GoTo Etiquette
    ' Si Echec on crée une nouvelle définition de  requête
    If qDef Is Nothing Then Set qDef = CurrentDb.CreateQueryDef("Stats")
    ' Affectation de la requête SQL
    qDef.SQL = strSQL
    qDef.Close
    ' Ouverture de la requête modifiée ou créée
    DoCmd.OpenQuery "Stats"
     
    End Sub

    mais ça ne marche pas si je rajoute par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Traitement Critère sur prescripteur
    strCrit = Nz([prescripteur], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(prescripteur = '" & strCrit & "')"
    End If

    si quelqu'un a une idée parce que j'ai bien vérifié mes noms dans la table, le formulaire et le code et ils sont identiques.

  12. #12
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Il y a peut-être une possibilité.
    Si la restriction porte sur un champ numérique il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Traitement Critère sur prescripteur
    strCrit = Nz([prescripteur], 0)
    If strCrit <> 0 Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(prescripteur = " & Str(strCrit) & ")"
    End If
    ou si la valeur 0 est une valeur possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Traitement Critère sur prescripteur
    strCrit = Nz([prescripteur], 0)
    If Not IsNull([prescripteur]) Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(prescripteur = " & Str(strCrit) & ")"
    End If
    A+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    merci c t bien ça en plus. est- ce qu'il y a encore une autre syntaxe pour les formats date ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    slt

    alors pr les dates c bon g trouvé. pour ceux ke ça interesse la solution (ou du moins une solution possible) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Traitement Critère sur date de sortie
    strCrit = Nz([date_sortie], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(date_sortie >= #" & strCrit & "#)"
    End If
    a+

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut
    re-slt,
    si je veux pour un critère sélectionner plusieurs possbilités, comment je peux ecrire le code ?
    par exemple j'ai un critère "Etape" ou j'ai quatre possibiltés (c'est une liste déroulante). Donc j'ai mis quatre listes déroulantes (Etape1, ..., Etape4) et j'ai essayé plusieurs possibiltés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Traitement Critère sur étape
    strCrit = Nz([Etape] Or [etape2] Or [etape3] Or [etape4], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(Etape LIKE'*" & strCrit & "*')"
    End If

    OU

    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
     
     
    ' Traitement Critère sur étape
    strCrit = Nz([Etape1], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " OR "
       strWHERE = strWHERE & "(Etape LIKE'*" & strCrit & "*')"
    End If
     
    ' Traitement Critère sur étape
    strCrit = Nz([Etape2], "")
    If strCrit <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " OR "
       strWHERE = strWHERE & "(Etape LIKE'*" & strCrit & "*')"
    End If
    la dernière marche, mais a condition de sélectionner que ce critère dans le formulaire... ce qui est logique ms bon j'ai kan même esayé, on sait jms.

    Donc si quelqu'un voit une solution, n'hésitez pas svp.

    a+

  16. #16
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    pour le critère sur Etape, on utilise le même principe que pour le contenu de WHERE.
    Pour cela on va utiliser une autre variable String (strCritEtape) que l'on va construire comme
    strWHERE, et que l'on ajoute ensuite à strWHERE.
    Comme le critère est un critère potentiellement composé (avec des OR), on le construit au fur et à mesure.
    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
    ' Construction critère sur Etape
    strCritEtape = ""
    
    ' 1ere liste
    strCrit = Nz([Etape1], "")
    If strCrit <> "" Then
       If strCritEtape <> "" Then strCritEtape = strCritEtape & " OR "
       strCritEtape = strCritEtape & "(Etape LIKE '*" & strCrit & "*')"
    End If
    
    ' 2eme liste
    strCrit = Nz([Etape2], "")
    If strCrit <> "" Then
       If strCritEtape <> "" Then strCritEtape = strCritEtape & " OR "
       strCritEtape = strCritEtape & "(Etape LIKE '*" & strCrit & "*')"
    End If
    
    ' 3eme liste
    strCrit = Nz([Etape3], "")
    If strCrit <> "" Then
       If strCritEtape <> "" Then strCritEtape = strCritEtape & " OR "
       strCritEtape = strCritEtape & "(Etape LIKE '*" & strCrit & "*')"
    End If
    
    ' 4eme liste
    strCrit = Nz([Etape4], "")
    If strCrit <> "" Then
       If strCritEtape <> "" Then strCritEtape = strCritEtape & " OR "
       strCritEtape = strCritEtape & "(Etape LIKE '*" & strCrit & "*')"
    End If
    
    ' Ajout critère Etape à la clause WHERE
    If strCritEtape <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(" & strCritEtape & ")"
    End If
    Je suppose que tu commence à voir le principe.

    Autre Possiblité, avec une liste à sélection multiple.
    Dans l'exemple ci-dessous la liste s'appelle ListeEtape, et on parcours les élements sélectionnés
    à l'aide d'une variable déclarée en Variant.
    L'écriture est simplifiée et on peut sélectionner de 1 à N étapes.
    Si aucune sélection, pas de critères sur Etapes, donc = Ttes les Etapes.
    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
    Dim strCritEtape as String
    Dim SeldItem  as Variant
    
    ' Construction critère sur Etape
    strCritEtape = ""
    
    For Each SeldItem In Me.ListeEtape.ItemsSelected    
        If strCritEtape <> "" Then strCritEtape = strCritEtape & " OR "
        strCritEtape = strCritEtape & "(Etape LIKE '*" & SeldItem & "*')"
    Next
    
    ' Ajout critère Etape à la clause WHERE
    If strCritEtape <> "" Then
       If strWHERE <> "" Then strWHERE = strWHERE & " AND "
       strWHERE = strWHERE & "(" & strCritEtape & ")"
    End If
    Bon et bien maintenant tu en connais autant que moi sur le sujet.

    A+ et bon courage.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 82
    Par défaut merci merci merci
    et bah merci bien. Cette ça y est, j'ai fini mon formulaire !
    je savais pas qu'on pouvait imbriquer les critères comme ça. c'est sympa kan on arrive enfin à comprendre. On peut faire à peu près ce kon veut après.

    a+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/01/2007, 17h25
  2. [PHP-JS] Menu vertical dynamique (source requête SQL)
    Par nbelg27 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2007, 15h31
  3. [Débutant] Paramétrage d'une requête SQL
    Par sunchai dans le forum Oracle
    Réponses: 2
    Dernier message: 31/07/2006, 11h48
  4. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41
  5. [PGA]paramétrage dynamique
    Par phig dans le forum Administration
    Réponses: 2
    Dernier message: 25/10/2004, 17h30

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