Bonjour,
Une formule matricielle doit récupérer les numéros de lignes d'un tableau pour lequel le champ "Ch_tags" contient des chaînes de caractères, Val1 et/ou Val2. Val1 et Val2 sont des cellules nommées, où se trouve les valeurs de critères de sélection.
Je prévois deux versions
- version condition ET :
=GRANDE.VALEUR(ESTNUM(CHERCHE(Val1;Ch_tags;1))*ESTNUM(CHERCHE(Val2;Ch_tags;1))*(LIGNE(Ch_tags));LIGNE()). (avec accolades, bien sûr)
Fonctionne bien : renvoie les lignes satisfaisant au critère pour lequel les chaînes Val1 et Val2 sont trouvées dans la cellule de Ch_tags correspondante. Les x lignes sont renvoyées par ordre décroissant dans les x lignes de la plage où est entrée la formule matricielle.
- version condition OU :
Les choses se corsent !
J'ai essayé diverses formules pour évaluer la présence de Val1 OU de Val2 dans le vecteur Ch_tags.
Sans succès.
=GRANDE.VALEUR((ESTNUM(CHERCHE(Val1;Ch_tags;1))+ESTNUM(CHERCHE(Val2;Ch_tags;1)))*(LIGNE(Ch_tags));LIGNE()).
Problème: si un des membres de la somme renvoie une erreur, la somme n'est pas évaluée comme VRAI et la condition OU est mal traduite. Il faudrait renvoyer 1 au moins si une des deux chaînes est présente.
Autre idée, mais ne marche pas :
=GRANDE.VALEUR((MAX(SI(ESTNUM(CHERCHE(Val1;Ch_tags;1));1;0);SI(ESTNUM(CHERCHE(Val2;Ch_tags;1));1;0)))*(LIGNE(Ch_tags));LIGNE())
Auriez-vous une idée de la façon d'exprimer la condition OU ?
A moins qu'en amont, il y ait une autre façon de construire la fonction matricielle !
Je sais que les fonctions matricielles seront très lentes (tableau de 20 000 lignes) et que VBA serait plus adapté.
Mais j'aimerais trouver une solution.
Merci à tous,
Une formule matricielle doit récupérer les numéros de lignes d'un tableau pour lequel le champ "Ch_tags" contient des chaînes de caractères, Val1 et/ou Val2. Val1 et Val2 sont des cellules nommées, où se trouve les valeurs de critères de sélection.
Je prévois deux versions
- version condition ET :
=GRANDE.VALEUR(ESTNUM(CHERCHE(Val1;Ch_tags;1))*ESTNUM(CHERCHE(Val2;Ch_tags;1))*(LIGNE(Ch_tags));LIGNE()). (avec accolades, bien sûr)
Fonctionne bien : renvoie les lignes satisfaisant au critère pour lequel les chaînes Val1 et Val2 sont trouvées dans la cellule de Ch_tags correspondante. Les x lignes sont renvoyées par ordre décroissant dans les x lignes de la plage où est entrée la formule matricielle.
- version condition OU :
Les choses se corsent !
J'ai essayé diverses formules pour évaluer la présence de Val1 OU de Val2 dans le vecteur Ch_tags.
Sans succès.
=GRANDE.VALEUR((ESTNUM(CHERCHE(Val1;Ch_tags;1))+ESTNUM(CHERCHE(Val2;Ch_tags;1)))*(LIGNE(Ch_tags));LIGNE()).
Problème: si un des membres de la somme renvoie une erreur, la somme n'est pas évaluée comme VRAI et la condition OU est mal traduite. Il faudrait renvoyer 1 au moins si une des deux chaînes est présente.
Autre idée, mais ne marche pas :
=GRANDE.VALEUR((MAX(SI(ESTNUM(CHERCHE(Val1;Ch_tags;1));1;0);SI(ESTNUM(CHERCHE(Val2;Ch_tags;1));1;0)))*(LIGNE(Ch_tags));LIGNE())
Auriez-vous une idée de la façon d'exprimer la condition OU ?
A moins qu'en amont, il y ait une autre façon de construire la fonction matricielle !
Je sais que les fonctions matricielles seront très lentes (tableau de 20 000 lignes) et que VBA serait plus adapté.
Mais j'aimerais trouver une solution.
Merci à tous,