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

14 réponses

Jean_Jacques Messages postés 1048 Statut Membre 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
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
Jean_Jacques Messages postés 1048 Statut Membre 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
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
CaPiT Messages postés 622 Statut Membre 51
 
Ta table s'appelle table?

Il faut aussi adapté le code.
0
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
CaPiT Messages postés 622 Statut Membre 51
 
Bonjour,

Affiche à chaque fois ton code pour que je puisse voir d'ou ça vient.
0
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
CaPiT Messages postés 622 Statut Membre 51
 
Ton champs s'appelle "Clé" ??

Celui-là aussi est a adapté !
0
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
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
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
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
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
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
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
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