|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
Bonjour,
Dans une base de gestion d'items, je souhaite afficher l'ensemble des items à commander dans une zone de liste. Le formulaire permet ensuite de commander l'item sélectionné. J'ai ajouté deux zones de liste déroulante permettant de filtrer les items affichés par leur "statut" ou le "module" auquel ils appartiennent, à l'aide d'une requête SQL + Requery de la zone de liste. Cette technique empêche d'afficher tous les items, ou les items de tous les modules pour un statut donné ou les items de tous statuts dans un module donné. Aussi, j'aimerais pouvoir rajouter un choix "ALL" en haut de mes listes déroulantes. J'ai trouvé ce bout de code dans votre forum mais ne voit pas comment l'appliquer à mon besoin. http://access.developpez.com/faq/?pa...l#AjoutTousLst Sauriez-vous détailler un peu plus afin de m'aider à le mettre en place ? En particulier, comment faire en sorte que ma requête affiche tous les enregistrements lorsqu'elle "lit" la valeur "ALL" ? Merci par avance pour votre aide ! Joyeuses fêtes, Thomas |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour Thomas75005,
Pour l'implémentation de la requête, il faut que tu implémente la requête UNION dans le controlSource de ta listbox (n'oublie pas de préciser l'ordre de tri de manière à afficher le (Tous) en début ou en fin de liste Ensuite, il te faut sélectionner la colonne liée, afin de retourner la valeur que tu souhaite. Enfin, il te faudra construire le résultata de ta requête dynamiquement, de manière à ne pas insérer de clause WHERE dans celle-ci si la valeur retournée pas ta colonne liée se réféère au (Tous) |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
Bonjour,
Merci pour tes conseils ! Pas de soucis pour ajouter le champs "TOUS" dans ma liste déroulante. Par contre, je ne sais pas (encore) faire de requêtes dynamiques. J'imagine qu'il faut rentrer dans le SQL de la requête pour supprimer la condition WHERE si Code :
Formulaires.MonFormulaire.choix_module = "Tous" Code :
WHERE MaTable.Module = Formulaires.MonFormulaire.choix_module Extrait du SQL : Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
Bonjour Thomas75005
Il faut que tu gère le SQL directement dans le VBA. Le mieux est que tu codes quelque chose dans le genre : Code :
|
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
Merci beaucoup, je vais essayer ça !
Et donc si je veux insérer cette instruction comme contenu de ma zone de liste déroulante je conclus avec Code :
mazonedelistederoulante.RowSource = MonSQL N'est-ce pas ? |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
tout à fait.
N'hésite pas à consulter l'aide en ligne de Acces à ce sujet, qui est très bien faite. |
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
J'ai essayé avec une requête simple : ça marche nickel !
J'ai opté pour cette syntaxe : Code :
Je sais déjà que je dois changer "HAVING" en "WHERE", quant est-il des autres éléments ? La requête est-elle trop longue pour l'insérer dans VBA ? Comment l'y rendre lisible ? Est-ce que je peux l'écrire comme ceci : MonSQL="SELECT...." & "FROM ...." & "HAVING ..." & "GROUP BY ..." Merci encore ! Code :
|
||||
|
|
00
|
|
|
#8 | ||
|
Membre éprouvé
![]() Jean-Yves DUMASConsultant informatique Inscription : juin 2010 Messages : 325 ![]() |
ta requête m'a l'air correcte (à a part le HAVING effectivement car il ne porte pas sur les agrégats)
Il faudrait que tu mettes simplement les critères sur tes formulaires en dehors de la chaîne et de les remplacer par les valeurs issues du formulaire comme suit (attention, je n'ai pas mis les double-quote partout, tu sauras compléter): Code :
Tu ne devrais pas havoir de limite pour ta requête (le type String est limité à 63Ko, ce qui laisse un peu de marge Par compte, pour que la concétation marche avec le changement de ligne, la syntaxe en fin de ligne doit ête obligatoirement & _ Pour tester, mets un point d'arrêt sur ta variable MonSQL juste avant de l'affecter en rowsource. Un p'tit coup de débugger (Ctrl + G), un p'tit debug.print de la variable et un copier-coller dans l'éditeur de requête, exécuter, et hop ! Rien de tel pour voir si ça marche Bon courage |
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
Merci encore, je pars en congés, je te donne donc un retour sur tout ça à la rentrée ! Bonnes fêtes !
|
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : novembre 2010 Messages : 13 ![]() |
Bonjour et bonne année !
J'ai donc inséré ce code avec les double quote et tout et tout... et malheureusement j'ai rencontré l'erreur 2176 (Paramètre de la propriété RowSource est trop long)... Pour contourner ce problème, je me demandais s'il n'est pas possible d'enregistrer plutôt la requête sans filtrage sur le module et ainsi de coder un truc du genre : Code :
// Bon j'ai finalement dupliqué ma requête (une avec le filtre et une sans) et fait appel tantôt à l'une, tantôt à l'autre dans mion rowsource. Ca marche aussi nickel avec le Filter d'un sous-formulaire. Merci pour tes conseils en tout cas ! |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com