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 sélection muticritères (nbr variable)


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut Requête sélection muticritères (nbr variable)
    Bonjour,

    Je suis débutant sous Access et n’ai que quelques brèves notions de SQL. A partir d’une base de données que j’ai réalisée, j’alimente des formulaires de consultation à partir de requêtes sélection dont les critères sont issus de listes déroulantes ou zones de texte. Je n’ai aucun problème pour alimenter mes formulaires à partir de requêtes simple (type un ou plusieurs critères à la fois). J’utilise alors ce type de code au niveau de la procédure événementielle (sur clic) de chaque bouton propre à mes différentes requête (depuis un formulaire regroupant l'ensemble de mes requêtes).

    Exemple :

    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
    Private Sub Commande124_Click()
    On Error GoTo Err_Commande124_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
     
        stDocName = "R_EVNMT_REG" (correspond au nom de ma requête)
        DoCmd.OpenQuery stDocName, acNormal, acEdit
        DoCmd.Close
     
        stDocName = "SFR_EVENMT_REG" (correspond au nom de mon formulaire qui s’ouvre et dont la source de données est ma requête ci-dessus)
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_Commande124_Click:
        Exit Sub
     
    Err_Commande124_Click:
        MsgBox Err.Description
        Resume Exit_Commande124_Click
    Ma difficulté rencontrée est pour une « requête sélection multicritères » basée sur trois champs : 2 « zones de texte » (date de début et fin) et un menu déroulant « région ». Ma requête s’exécute correctement avec les 3 champs renseignés (2 dates et une région précisée) mais je voudrais aussi pouvoir exécuter la même requête sans forcément définir une région (pas de sélection dans la liste déroulante, ce serait alors une sélection qui prendrait en compte toutes les données relatives à l’ensemble des régions).

    Dans ma requête sélection j'ai :

    2 critères liés à mes zones de textes de mon formulaire Requête sur les champs date (début et fin):
    >=[Formulaires]![F_REQUETES]![ztxt_evenmt_date1]
    <=[Formulaires]![F_REQUETES]![ztxt_evenmt_date2]

    + 1 critère menu déroulant « région » (que je voudrais rendre aléatoire), lié à mon menu déroulant :
    Formulaires![F_REQUETES]![COMBR_EVNMT_REG_DAT]

    J’espère avoir été suffisamment clair… Je vous serez extrêmement reconnaissant si vous pouviez m’aider, je vous remercie.


  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Je ne sais pas si ça va t'aider ou non, mais tu as ce tutoriel/ code déjà fait:

    http://cafeine.developpez.com/access...echerchemulti/

    J'ai cru comprendre que le nombre de critères de filtres dans ton cas était variable, mais je pense que le reste du tutoriel peut s'appliquer.

    L'idée c'est de générer une requête SQL dont les critères de filtres sont rajoutés ou non (" AND Monchamp like '****' ").


    Ce que tu peux faire, c'est rajouter à ton critère de filtre, pour une liste, une valeur nulle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Champ from Table Union Null from table
    Ensuite, grâce une fonction Nz(), tu peux lui donner une valeur littérale, genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String = Nz(Forms![Table].champ,"nul")
    
    If String <> "nul" Then  On ajoute la requête
    
    Else (si besoin)
    
    End if


    Là, il ne fera pas le tri sur ce critère de filtre, donc affichera "tout" (relativement aux autres filtres), par contre méfiance si la valeur "nulle" existe pour de bon dans tes choix possibles, là il faudra gérer ça dans le Else.



    La méthode proposée par Charles A dans son tutoriel de recherche multi-critère permet par un simple clic d'annuler purement et simplement le critère de filtre en l'affichant ou non: c'est aussi une solution élégante.

    Toutefois, pense au cas où ton filtre contiendrait réellement une valeur "nulle" valable, dans ce cas il faudra gérer ça avec un bout de requête du type "AND MonChamp is Null ".


    En espérant avoir été assez clair, sachant que je ne suis qu'un débutant qui a bien du mal pour certaines choses simples d'Access.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse. Comme je le précisais dans mon message, je suis débutant en la matière... Je comprends le principe mais je ne sais pas trop où placer ce code. j'ai fait plusieurs tests, j'ai lu également le tutoriel, mais je suis resté sans succès face à ma difficulté...

    Le premier code (critère de filtre) est à ajouter dans ma requête sélection sur la ligne critère ? Je ne connais pas le "Union Nulll"...

    La deuxième code (nz) est à placer où ? Ma requête est exécutée à partir d'une procédure évenementielle sur clic (bouton dans un formulaire requête) , elle prend donc en compte mes critères déclarées préalablement dans cette meme requête. Faut il insérer le code à ce niveau (vba) ?

    Je te remercie beaucoup si tu peux me répondre car je suis vraiment bloqué sur ce problème.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Déjà, je suis moi même débutant, je suis TRES loin de tout maîtriser.

    Je te conseille de t'acheter un ou plusieurs livres pour savoir utiliser Access.

    Personnellement j'utilise Access 2003, et j'ai acheté le livre de Hervé Inisan, "Access 2003" dans la collection "Référence Micro Application", un énorme pavé de 1300 pages qui part du général (usage courant d'Access) au particulier (usage du VBA, mise en réseau, etc...).

    Un ouvrage que tu ne pourras trouver que d'occasion malheureusement, mais c'est à mon sens le meilleur ouvrage pour comprendre.


    Pour en revenir à ton problème, on va s'appuyer sur l'exemple que je t'ai donné de recherche "multi-critères", regarde bien le code employé.

    L'exemple est la création d'un formulaire avec des champs que l'on peut sélectionner ou non pour créer des filtres qui peuvent (ou non) "se cumuler" entre eux.

    Le résultat du filtrage est obtenu sous forme d'une requête construite pas à pas et qui donnera le "contenu" pour créer une liste de résultats (et pas une table...).

    Donc, tout le code qui est donné dans l'exemple est associé au formulaire de sélection de filtres.

    Dans la partie Visual Basic, il sera associé à l'Objet de Classe de Microsoft Access, "Formulaire XXXX".


    [Les filtres sont activés ou non en cochant, décochant une case: la case à cocher est un objet contrôle à mettre sur le formulaire.]


    Le code donné dans l'exemple est donc à rentrer en VBA dans le module associé au formulaire, mais il y a aussi toutes les opérations évènementielles à associer aux contrôles à réaliser directement sur le formulaire.


    Donc... le critère de filtre n'est pas à rajouter à ta requête sélection dans une requête "toute faite sous Access" via l'assistant (encore que... ), il est à rajouter dans une requête qui se construit petit à petit grâce au VBA.

    A chaque fois un test, si le critère de filtre est apparent alors on l'applique sinon on passe au suivant.

    Une fois la requête totalement construite, elle est exécutée et son résultat est envoyé dans "la liste de résultats" qui s'affiche alors.


    Le "Union Null", permet par exemple, dans le cas d'une liste de choix déroulante (= Combobox) dont les choix proviennent d'une table, de rajouter une valeur nulle parmi les choix possible (un blanc dans la liste si tu préfères), ça peut être très utile...

    Le code NZ permet de remplacer par ce que tu veux une valeur dont le contenu serait "nul" (au sens de rien), ça permet d'éviter certaines erreurs dans l'exécution d'un code.

    Il est à placer dans une procédure où tu en as besoin. Dans mon cas, ça me sert à tester si une valeur a été rentrée, et si elle est nulle ou non.



    Je te conseille de prendre ton temps et de bien regarder le code fourni dans l'exemple, essaie de comprendre l'action de chaque ligne.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour tous tes conseils, je vais prendre le temps d'appronfondir la question et j'espère trouver ma solution...

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Je suis désolé de ne pas t'être d'un plus grand secours, j'espère que tu arriveras à adapter le code donné à tes besoins.

Discussions similaires

  1. Requète paramétrée avec résultat variable
    Par slackjayo dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 20h39
  2. Réponses: 4
    Dernier message: 27/04/2006, 14h05
  3. Exécuter une requête à partir d'une variable
    Par Poussy-Puce dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/03/2006, 14h15
  4. Requête sélection : recherche par nom
    Par leeloo77 dans le forum Access
    Réponses: 7
    Dernier message: 17/02/2006, 15h39
  5. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38

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