Salut,
Je crois que ton problème est resolvable en utilisant une table temporaire. Tu recopies la table sur laquelle tu fais ta selection en integralité, et à chaque modification de tes critères de selection, tu recrées cette table temporaire avec les elements qui correspondent à ce choix. Par exemple, sur le "on_change" de la liste de choix concernant le critère "couleur", tu sais que tu n'as à effectuer que le test sur la couleur, ça t'evite de vérifier si le critère "prix" est resté vide. Une fois que la couleur est choisie, tu recrées ta table temporaire, et tu ne travailles plus qu'avec les enregistrements qui correspondent à ton premier critère choisi.
En terme d'efficacité, je ne sais pas ce que ça donne, mais ça évite de créer 8! requètes avec presque autant de if else dans ton code. Si vraiment ta table est très importante, tu peux faire ça en deux ou trois formulaires, que tu enchaines, en regroupant tes critères par categories, mais la je ne peux pas te dire ça sans savoir sur quoi tu travailles...
Bon courage,