Probleme de requete ACCESS

emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
willou-78 Messages postés 68 Statut Membre -
Bonjour,
Je souhaiterais apartir d'une requete sous access, dans un formulaire effectuer un tri multiple, je m'explique

le resultat de ma requete me donne une liste de machine, avec categorie, marque, model, accessoire,

je souhaiterer de cette liste pouvoir afficher certaine information en cascade,
par exemple, apres avoir choisit une categorie, n'avoir que les machine de cette categorie a l'ecran, ensuite choir une marque a partir du resultat precedant, et n'avoir que celle ci, etc...

merci de me guider un peux dans cette demarche
Configuration: Windows XP
Internet Explorer 7.0

14 réponses

  1. Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
     
    Bonsoir,

    J'ai en tête une piste qui consiste à enchaîner des filtres filtres successifs pour parvenir au résultat recherché.

    Évènement sur click dans le champ du formulaire à filtrer

    Rem filtre sur valeur
    Me.Filter = ("[Valeur]= " & Me!Valeur)
    Me.FilterOn = True 'Applique le filtre

    Rem filtre sur statut + Opération
    Me.Filter = "Statut ='En cours' and Opération ='Achat'"
    Me.FilterOn = True 'Applique le filtre

    Je ne suis pas sûr de moi, mais il me semble que c'est jouable.

    Cordialement
    La science ne fait que trouver ce qui existe depuis toujours.
    REEVES Hubert.
    0
  2. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Est ce que ça a répondu à ta question? J'ai une autre chose à te proposer, mais si la première te convient je ne veux pas t'embrouiller les idées...
    0
    1. Jean_Jacques Messages postés 1045 Date d'inscription   Statut Membre Dernière intervention   112
       
      Bonjour Lately GEEK,

      Ne sois pas timide, je suis preneur et impatient de connaître ton grand secret ...
      Par défau, j'ai documenté la solution des filtres en cascade, mais je n'hésiterais pas
      à changer de monture si la tienne est meilleure


      Merci d'avance

      A+
      La science ne fait que trouver ce qui existe depuis toujours.
      REEVES Hubert.
      0
    2. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonsoir,
      non ca n'a pas tout a fait repondu a ma question

      désolé
      0
  3. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonsoir,

    en fait je cherche plutot a avoir une forme sur menu deroulant, c'est a dire :

    5 menus deroulant en en tete de formulaire qui se nomme ainsi :

    categorie
    sous categorie
    marque
    modele
    position designation

    (ceux ci etant des champs d'une meme tables corespondante au formulaire crée)

    et donc filtrer avec de evenements apres mise a jour, soit apres avoir choisit une categire, puis une sous catégorie, une marque et un model n'avoir que les element corespondant au reste donc, dans la liste restante de mon formulaire, le model et les "position designation" et je doit dire que je suis réelement perdu, j'acorde que le projet est un peux ambicieux pour un novice comme moi, mais l'ensembles des outils restant que j'ai effectué coresponde bien a moi besoin, il ne me manque que ca ...

    Merci pour votre aide
    0
  4. CaPiT Messages postés 622 Statut Membre 51
     
    Bonjour, j'ai surement la réponde mais j'ai d'abord des question.

    Est ce que lorsque tu asir séctionné les 5 listes déroulants, ça doit te retourner un ou plusieurs résultats?
    Le résultat s'afffiche dans une requête, un état ou un formulaire?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   550
     
    Bon, j'interviens juste pour dire ce que je crois avoir compris.

    On dit qu'on est dans un formulaire que j'appelle FParamètres.

    Première liste déroulante:

    Elle extrait la liste des catégories, donc elle est basée sur une requête qui contient juste le champ catégorie, avec un regroupement.
    Je l'appelle ChoixCatégorie

    La deuxième liste déroulante doit contenir les sous-catégories correspondant à la catégorie choisie dans ChoixCatégorie, right?
    Elle est basée sur une requête qui contient deux champs, Catégorie et SousCatégorie, le champ Catégorie étant masqué et ayant un critère libellé comme suit:
    Forms!FParamètres!ChoixCatégorie.
    Je l'appelle ChoixSousCatégorie

    La troisième liste déroulante doit contenir les marques correspondant à la sous-catégorie choisie dans ChoixSousCatégorie.
    Elle est basée sur une requête qui contient deux champs, SousCatégorie et Marque, le champ SousCatégorie étant masqué et ayant un critère libellé comme suit:
    Forms!FParamètres!ChoixSousCatégorie.

    Etc etc etc...

    Il ne reste qu'une chose à faire: Faire en sorte que chaque liste déroulante soit mise à jour à chaque changement dans celle qui la précède.

    Sur le propriété AprèsMAJ de ChoixCatégorie, on écrira dans une procédure évenementielle:
    DoCmd.Requery ("ChoixSousCatégorie")

    Etc etc etc...

    0
  7. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci pour toutes ces infos, effectivement votre description corespond bien a mon besoin,
    par contre juste quelque petit détail

    le formulaire que l'on appel donc FParametre est l'image d'une tables qui se nomme "t_tarifgeneral", contenant pour chaque enregistrement, un champ categorie, un champ souscategorie, un champs marque, un champs model ...
    je sait que ce n'est pas tres academique, mais c'est ainsi pour le moment.

    sur mon formulaire qui a été crée a partir de l'assistant depuis cette table, je retrouve donc tous mes enregistrements, et effectivement en en tete de formulaire j'ai fait 5 menu déroulant, ayant chacun comme source de control leurs champs respectif, avec effectivement la cléf primaire qui est caché dans la liste, sauf qu'a ce jour la seule chose que font mes menu c'est me montrer les elements du champ, et apres selection il ne se passe rien puisque je n'est pas fait de procedur evenementielle apres MAJ.

    Donc dois je faire des requete ou est ce que je peux exploiter directement a partir de ma table ?

    peux etre avec une procedure evenementiel sur un bouton qui lirais les choix de mes menu deroulant et afficherai le resultat, j'ai vus quelque chose de similaire dans une base mais ca me depasse aussi

    Merci
    0
    1. CaPiT Messages postés 622 Statut Membre 51
       
      Bonjour,

      tu n'es pu très loin de la fin. Il suffit maintenant que sur le clic du bouton, tu mettes en place une requête dans le VBA qui sélectionne l'enregistrement de la clé primaire dont les 5 critères sont les 5 listes et qui te balance le formulaire.

      Private Sub bt_Click()
      
          Dim stDocName As String
          Dim stLinkCriteria As String
      
          stDocName = "Formulaire"
          
          Set db = CurrentDb()
          Set res = db.OpenRecordset("SELECT CléPrim FROM table WHERE ([Table.Champs1] = '" & Choix1 & "') AND ([Table.Champs2] = '" & Choix2 & "') AND ([Table.Champs3] = '" & Choix3 & "')  AND ([Table.Champs4] = '" & Choix4 & "') AND ([Table.Champs5] = '" & Choix5 & "') ;")
      
          stLinkCriteria = "Clé=" & res!CléPrim
          DoCmd.OpenForm stDocName, , , stLinkCriteria
      End Sub


      C'est un exemple ;)
      0
      1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > CaPiT Messages postés 622 Statut Membre
         
        Bonjour,

        j'ai essayé d'utiliser ce code sur un bouton, mais j'obtien une erreur :
        poiur info, et pour simplifier mon test, les menu déroulant se nomme de "choix1 a "choix5"
        et Cléprim par le nom de mon champ de clef primaire soit : "numero"

        et ensuite j'ai remplacé table par le nom de ma table et champ 1 à 5 par les nom de champ respectif corespondant au bouton nommé choix 1 à 5 .

        j'obtient le message suivant :

        erreur 3131

        erreur de syntaxe dans la clause FROM,

        a l'ouverture du debogeur le code est ainsi :


        Private Sub Commande25_Click()


        Dim stDocName As String
        Dim stLinkCriteria As String

        stDocName = "f_tarifgeneral"

        Set db = CurrentDb()
        Set res = db.OpenRecordset("SELECT Numero FROM table WHERE ([tarifgeneral.categorie] = '" & Choix1 & "') AND ([tarifgeneral.souscat] = '" & Choix2 & "') AND ([tarifgeneral.marque] = '" & Choix3 & "') AND ([tarifgeneral.model] = '" & Choix4 & "') AND ([tarifgeneral.positiondésignation] = '" & Choix5 & "') ;")

        stLinkCriteria = "Clé=" & res!Numero
        DoCmd.OpenForm stDocName, , , stLinkCriteria

        End Sub


        qu'ai je oublié ?
        merci d'avance
        0
  8. CaPiT Messages postés 622 Statut Membre 51
     
    Ta table s'appelle table?

    Il faut aussi adapté le code.
    0
    1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      oups!!,j'avais oublié sur un petit bout dsl,

      par contre maintenant jai comme reponse "aucun enregistrement en cours"
      alors qu'il y a prest de 10000 entrée, et plusieur centaine sur les essais de critère que j'ai effectué ?
      0
  9. CaPiT Messages postés 622 Statut Membre 51
     
    Bonjour,

    Affiche à chaque fois ton code pour que je puisse voir d'ou ça vient.
    0
    1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      le code est :

      Private Sub Commande25_Click()


      Dim stDocName As String
      Dim stLinkCriteria As String

      stDocName = "f_tarifgeneral"

      Set db = CurrentDb()
      Set res = db.OpenRecordset("SELECT Numero FROM tarifgeneral WHERE ([tarifgeneral.categorie] = '" & choix1 & "') AND ([tarifgeneral.souscat] = '" & choix2 & "') AND ([tarifgeneral.marque] = '" & choix3 & "') AND ([tarifgeneral.modele] = '" & choix4 & "') AND ([tarifgeneral.positiondésignation] = '" & choix5 & "') ;")

      stLinkCriteria = "clé=" & res!Numero
      DoCmd.OpenForm stDocName, , , stLinkCriteria

      End Sub


      la ligne surligné a l"execution du message d'erreur est celle en gras
      0
  10. CaPiT Messages postés 622 Statut Membre 51
     
    Ton champs s'appelle "Clé" ??

    Celui-là aussi est a adapté !
    0
    1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      j'ai bien bien fit les modif suivantes :

      le code exemple que tu m'a donné est :

      stLinkCriteria = "Clé=" & res!CléPrim

      mon champ clé (ma clé primaire) se nomme : Numero

      j'ai donc ecrit :

      stLinkCriteria = "Numero=" & res!NumeroPrim

      j'ai meme fait ces variante, ne sachant pas exactement la syntaxe :

      stLinkCriteria = "Numero=" & res!CléPrim

      et

      stLinkCriteria = "Numero=" & res!Numero

      et rien n'y fait
      0
  11. CaPiT Messages postés 622 Statut Membre 51
     
    Vas dans ton formualaire. Vas dans les propriétés du champs représentant la clé primaire.

    Dans "Autre" donne mois son nom Exact!
    0
    1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      dans les propriétés du champ dans mon formulaire, sur l'onglet "autre", sont nom exact est :

      "Numero"

      imprim ecran dispo ici

      http://pierquet.kasto.free.fr/impecr.JPG
      0
  12. CaPiT Messages postés 622 Statut Membre 51
     
    Ahhhh !

    Fallait dire que c'était dans le même formulaire. Ca se complique du coup, je ne pense ne pas avoir la solution.

    Le StlinkCriteria ne fonctionne il me semble que d'un formulaire à un autre.
    Sinon la réponse aurait été ça:

    stLinkCriteria = "Numero=" & res!Numero

    Au pire essaie:
    DoCmd.OpenClose
    stLinkCriteria = "Numero=" & res!Numero

    Mais c'est du gros bricolage, le mieux étant de faire deux formulaire indépendant.
    0
    1. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      c'est a dire ?

      1formulaire indepandant avec mes menu de control et la procedure sur le bouton,

      et un formulaire avec les donnée, inséré comme sous formulaire dans le premier, ex :

      table : tarifgeneral
      form1 : f_tarifgeneral
      form2 : f_selection

      f_selection contient les bouons de filtrage, qui pointe le formulaire f_tarif general ?
      et comment et ou est ce que j'affiche mes resultat ?

      merci
      0
  13. CaPiT Messages postés 622 Statut Membre 51
     
    Exactement.

    Le 1er formulaire possède les 5 listes (basées sur requête et table) puis le bouton.
    Le 2eme formulaire contient tous les enregistrements de la table (avec formulaire, sous-formulaire ..etc) si on l'ouvre via la base. Mais possède que certains enregistrements si on l'ouvre via le 1er formulaire.
    0
  14. emmadu31 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     
    ok,
    je vais essayer de mettre ca en place, et je donne de mes nouvelles des que c'est organisé, et que ca marche !!!
    merci
    0
  15. willou-78 Messages postés 68 Statut Membre 3
     
    Bonjour,
    Moi aussi, je suis interessé par ce genre de requette. La seule façon dont j'y arrive, est d'ouvrir un nouveau formulaire avec les enregistrement correspondant au choix, dans une liste normal ou déroulante.

    Dans le cas d'une gestion de parque informatique.
    dans un formulaire de type "feuille de donnée", je voudrais attribuer une liste de matériel (lecteur DVD, carte vidéo, carte son, carte mer...), marque et référence, à un PC, sachant que les marque son dépendantes des composants et le réference, dépendantes des marque. Par exemple

    (1) dans la premiere liste déroulante, je selectionne : carte vidéo
    (2) dans la seconde liste, je ne veux que les marque: NVIDIA, ATI, SIS...
    (3) etc.....

    (1) dans la première liste déroulante, je selectionne : carte son
    (2) dans la seconde liste, je ne veux que les marque: CREATIVE, REALTEK...
    (3) etc...

    est ce la même demande que emmadu31 ? si non, est ce possible ?

    Merci
    0