EQUIV ne fonctionne pas avec MAX.SI.ENS

Bonsoir,

j'utilise la fonction MAX.SI.ENS pour trouver une valeur max correspondant à 5 critères. Cette valeur max se trouve dans une colonne où il peut y avoir plusieurs valeur max similaires (ex : cette valeur max avec critères peut être égale à 7, mais cette colonne est composée de plusieurs 7). Malheureusement la fonction EQUIV me renvoie systématiquement la valeur de la première ligne qui contient la valeur max trouvée par la fonction MAX.SI.ENS, comme dans l'exemple ci-joint. Or ce n'est pas forcément le cas. Mais la fonction EQUIV a l'air de se préoccuper uniquement de la valeur.

Je cherche donc à obtenir la valeur max mais qui correspond à mes critères, donc qui ne soit pas forcément la première rencontrée.

Y a-t-il une astuce pour obtenir la bonne adresse correspondante à la valeur max cherchée selon mes critères ?

Bonne soirée,

Joe

Bonsoir,

le principe de l'astuce trouvé sur le net et mis en place dans mon application "Alerte anniversaire" est de créer une décalage dans les valeurs numériques en fonction de leur positions au niveau des lignes :
dans votre cas si le "7" en ligne 5 avait un décalage au millième correspondant à son numéro de ligne vous auriez alors 7,005, et la valeur "7" en ligne 10 aurait 7,01, du coup la fonction Max renverrait le 7,01 et index suite à la recherche renverrait les données de la ligne 10.

Dans "Alerte Anniversaire" le principe était de trouver les noms des personnes dont à la date du jour était en "anniversaire", sans le décalage, lorsqu'il y avait plusieurs personne cela me retourner toujours le même nom, le premier trouvé par INDEX en fonction de la date. Le fait de faire le décalage en fonction de la position des dates au niveau des lignes, pour une date réelle identique, il y avait pour la recherche une différence, du coup tous les noms différents sortaient.

Maintenant reste plus qu'à mettre le principe en œuvre sur votre fichier, mais la fonction n'est pas reconnue chez moi, je n'ai pas installé le pack des 90 nouvelles fonctions pour "rester compatible" au partage. Mais vous pouvez aller voir cette formule dans mon application pour mieux appréhender son fonctionnement.

@ bientôt

LouReeD

bonsoir

un essai (autrement)

cordialement

41joeblier.xlsx (10.29 Ko)

Pour finir, ma formule en SOMMEPROD :

=INDEX(B2:B11;EQUIV(SOMMEPROD((A$2:A$11=I7)*(B2:B11=J7)*(C2:C11=K7)*(D2:D11=L7)*(E2:E11=M7)*((F2:F11)+LIGNE(A2:A11)/10^10));F2:F11+LIGNE(A2:A11)/10^10;0))

à valider avec les trois touches Shift+Ctrl+Entrée, où l'on voit bien le décalage des valeur par l'ajout d'une infime partie de numéro de ligne divisée par 10^10...
Bonjour tulipe_4 !

@ bientôt

LouReeD

tulipe_4, vous faites dans la multiplication et mois la division !
Mais si j'arrive à sortir des choses comme celle ci c'est que j'ai additionné pas mal de vos techniques ! Merci encore !

@ bientôt

LouReeD

Merci beaucoup LouReed et Tulipe pour vos réponses !

@LouReed : j'ai bien compris l'astuce, mais j'aurais voulu ne pas toucher les valeurs contenues dans mes colonnes.

@Tulipe : j'ai essayé la formule en ajoutant des colonnes, en modifiant quelques détails et cela fonctionne très bien sur le fichier test. Mais en copiant collant la formule sur mon document de travail, je n'ai pas de valeur qui s"affiche mais #valeur!, (le type de données d'une valeur utilisées est incorrect).

J'ai des données issues de listes déroulante, en format standard et heure.

Il doit y avoir une erreur toute bête.

Voici le code que j'ai adapté :

=INDEX(F2:F230;SOMMEPROD(MAX((B2:B230&C2:C230&D2:D230&G2:G230&N2:N230&K2:K230=V7&W7&X7&Y7&Z7&SOMMEPROD(MAX((B2:B230=V7)*(C2:C230=W7)*(D2:D230=X7)*(G2:G230=Y7)*(N2:N230=Z7)*(K2:K230))))*LIGNE(B2:B230)-1)))

En enlevant le -1 dans la formule INDEX cela fonctionne bizarre

A savoir que je ne touche pas aux valeurs, ce ne sont que leur représentation dans la matrice de la formule qui sont "modifiées" tout comme tulipe_4 les multiplie avec le numéro des lignes...

@ bientôt

LouReeD

re

bon alors ,il faut décortiquer le 2eme sommeprod

tu copies colle ce tronçon

SOMMEPROD(MAX((B2:B230=V7)*(C2:C230=W7)*(D2:D230=X7)*(G2:G230=Y7)*(N2:N230=Z7)*(K2:K230))))*LIGNE(B2:B230)-1))

pour voir si il crache une valeur ;je suppose que c'est des heures ;si pas de résultat , il doit y avoir une (ou plus) valeurs qui n'est pas au bon format dans K2:K230

du coup sommeprod qui multiplie (0 ou 1pour ok) par le n°de ligne had hoc ,se met en erreur car un texte*un nombre = #valeur

pour "tester" cette colonne k2:k230 ,tu inseres une colonne (que tu vireras) et tu saisis = k2*1 ,après avoir dupliqué tu dois voir les cel recalcitrantes

Bonjour,

En effet j'ai crié victoire trop vite, ça ne me renvoie pas les bonnes valeurs.

J'ai effectué ce que tu m'as demandé Tulipe : en faisant cela ma cellule de rempli de ##############

En multipliant la colonne par *1 je n'ai pas vu de cellule avec des erreurs

Dans cette fonction :

=INDEX(F2:F230;SOMMEPROD(MAX((B2:B230&C2:C230&D2:D230&G2:G230&N2:N230&K2:K230=V7&W7&X7&Y7&Z7&SOMMEPROD(MAX((B2:B230=V7)*(C2:C230=W7)*(D2:D230=X7)*(G2:G230=Y7)*(N2:N230=Z7)*(K2:K230))))*LIGNE(B2:B230)-1)))

Ne manque-t-il pas un ;0 lié à la fonction INDEX ? comme ceci :

=INDEX(F2:F230;SOMMEPROD(MAX((B2:B230&C2:C230&D2:D230&G2:G230&N2:N230&K2:K230=V7&W7&X7&Y7&Z7&SOMMEPROD(MAX((B2:B230=V7)*(C2:C230=W7)*(D2:D230=X7)*(G2:G230=Y7)*(N2:N230=Z7)*(K2:K230))))*LIGNE(B2:B230)-1;0)))

Edit :

En faisant cette modification j'ai les bons résultats. Mais si je fais une combinaison de critères qui n'existe pas, la formule m'envoie quand même un résultat, alors qu'il ne devrait pas y en avoir.

Rechercher des sujets similaires à "equiv fonctionne pas max ens"