Bonjour à tous,
Je viens à vous car je reste coincé sur quelque chose qui est basique, mais que je ne sais traiter que par une affreusement lourde méthode de concatenations.
Ainsi, j'ai une tables avec pas mal de champs (clé primaire, date, type de produit, soustype de produit, quantité, etc.)
Je voudrais permettre à l'utilisateur d'afficher les enregistrements de la table avec certaines conditions sur la plupart de ces champs.
Plus précisément, je lui laisse entrer l'intervalle de temps qu'il souhaite regarder (DateMin et DateMax), ce qui ne pose pas de problème particulier pour coder ma requête en SQL dans VBA (simple double condition dans le WHERE de ma requête).
Mais je lui laisse aussi sélectionner dans une listbox les produits et sous-produits qu'il souhaite voir spécifiquement (les produits et sous-produits sont bien affichés dans la listbox (ils sont issus d'une simple requête dans la table en question, pour bien donner toutes les possibilités), et j'exporte les produits que l'utilisateur sélectionne dans une table temporaire -est-ce bien nécessaire?).
Là où je coince, c'est dans la modification de la requête écrite en VBA.
En effet, là où ça ne me posait aucun problème pour les dates (une condition pour dire supérieur ou égal à telle date, et une condition pour dire inférieur ou égal à telle date) est un très gros problème quand l'utilisateur peut sélectionner 10 produits et 30 sous-produits différents.
Cela ne DEVRAIT pas être un problème, mais vu que je n'arrive pas à me servir correction des conditions "OR", ma requête finit avec un WHERE qui a beaucoup trop de conditions.
Je m'en suis sorti (c'est un grand mot!) avec une boucle qui parcourt les choix de l'utilisateur et qui concatenate à chaque fois "Or ((a.produit)=(produitX))"
Ce qui fait un horrible WHERE du genre:
WHERE (((a.produit)=(produit1) Or (a.produit)=(produit2) Or (a.produit)=(produit12) Or (a.produit)=(produit16)) AND (a.sousproduit)=(sousproduit1) Or (a.sousproduit)=(sousproduit4)....)
Quelle est la "belle" façon pour que ma requête aille directement chercher les données de ma listBox (du genre (a.produit)=lstProduits.Selected) sans avoir à sortir une méthode affreuse comme la mienne?
Merci d'avance pour votre aide.
Partager