Re : Filtre élaboré avec nombre de critère variables
Bonjour Adriano43,
Pour résoudre ton problème, je procèderai différemment.
Comme ta table de valeurs contient 7 colonnes (7 champs) il y a donc un maximum de 7 critères pour filtrer avec la fonction "ET".
Pour filtrer avec la fonction "OU", j'utiliserai un séparateur de type ";" pour chacun des 7 critères du filtre "ET".
Voir le fichier joint dans lequel j'ai réorganisé tes critères de filtre.
Maintenant le principe serait le suivant:
1ère étape:
je séquence toutes les possibilités de filtre en générant pour chacune d'entre elles une chaine de caractère de type:
a;b;c;d;e;f;g (si il n'y a pas de critère sur une colonne, on place le caractère vide "" entre deux points virgules)
Ces chaines de caractères sont stockées dans une table (Pour la manipulation des tables tu trouveras toutes les infos nécessaires sur le net). En reprenant le fichier Test, celà donnerait à stocker dans une table les chaines suivantes:
";COM;;6;;;arc"
";COM;;1;;;arc"
";COM;;6;;;pannes"
etc...
Pour rédiger le code sur cette première partie, tu pourras utiliser la fonction Split: u() = Split(Cellule contenant le critère, Chr(59)) (Chr(59) c'est le code ASCII du point virgule).
2ème étape:
Je compare chacune des lignes de ta feuille "Données" (en générant une chaine de caractère avec le point virgule comme séparateur et en remplaçant la valeur par le caractère vide "" si la colonne de critère correspondant est vide) avec chacune des lignes de la table.
Ainsi, si je reprend l'exemple de la feuille Test, la première ligne de la feuille données, donnerait comme chaine de caractères la valeur suivante:
";HALLE;;1;;;pannes"
Pour faire cette comparaison, on utilise la fonction VBA "Instr" par exemple.
Si la ligne de la feuille "Données" est identique avec une des données de la table alors je copie cette ligne dans la feuille2.
J'espère avoir été suffisemment clair. Je ne sais pas si cette méthode est la plus rapide, mais elle offre l'avantage de pouvoir filtrer avec autant de critères "OU" que tu le souhaites.
Le code est un petit peu long a rédiger mais ne pose pas de problème particulier.
Bonne journée.
Fred92