Re : formule ou VBA ?
Bonjour
Pas évident d'expliquer les formules utilisées, surtout parcequ'elles font un calcul matriciel (d'ou les {}).
Je vais essayer de faire mon possible.
Sur Excel, le * signifie en réalité multiplié. Si tu écris =2 * 5, tu obtiens dans la cellule 10. Si tu cliques sur cette cellule, dans la barre de formule, tu as toujours = 2 * 5, mais dans la cellule tu as 10.
Dans la fomule =MAX((S3:S11=B12)*((N3:N11+M3:M11)<=(A12+E12))*(M3:M11+N3:N11)), c'est plus compliqué...
En fait, il faut plutot voir cette syntaxe comme une série de SI :
(S3:S11=B12) signifie "Comparer le contenu de chaque cellule Sx de S3:S11 à B12". Cette partie de la formule, seule, sans le *, donne FAUX ou VRAI. Mais lorsqu'il y a une multiplication, on obtient des 0 ou des 1 : Lorsque Sx<>B12, mettre 0, lorsque Sx=B12, mettre 1.
De même avec (N3:N11+M3:M11)<=(A12+E12). Lorsque Nx+Mx est inférieur ou égal à A12+E12, on obtient un 1, sinon, un zéro.
Comme il s'agit d'un calcul matriciel, on obtient finalement une série de multiplication, par exemple
{0*1*(N3+M3);0*0*(N4+M4);0*1*(N5+M5);1*1*(N6+M6);0*1*(N7+M7);1*1*(N8+M8)....} (exemple sans aucun rapport avec les valeurs de ton fichier),
donc {0;0;0;N6+M6;0;N8+M8....}, et finalement, grace à la fonction MAX, on garde le plus grand nombre de cette matrice.
Grace à cette petite explication, peut être as tu déja compris pourquoi la formule que tu proposes ne te donne pas le résultat espéré🙂.
Avec {=Min((S3:S11=B12)*((N3:N11+M3:M11)>=(A12+E12))*(M3:M11+N3:N11))}, tu obtiens le minimum de la série {0;0;....} qui est évidemment 0.
En pratique, il faut éliminer ces 0, ce que l'on peut faire avec
=MIN(SI((S3:S11=B12)*(M3:M11+N3:N11>=A12+E12)<>0;M3:M11+N3:N11)).
J'ai l'impression que ça fonctionne bien... A tester davantage.
Bonne journée à tous.