Minimum avec un critère

redrum -  
 redrum -
Bonjour,

Ci-après un exemple de tableau excel avec lequel je travaille :

colonne A colonne B
toto 1
tata 2
titio 3
tata 4
titio 5
tata 6
toto 7

Je veux pouvoir trouver le minimum de la colonne B uniquement en prenant en compte les lignes qui s'appellent "toto"

Cela doit être possible quelque soit la cellule de destination, quelque soit la feuille

Avec une macro, c'est très facile mais je voudrais faire sans.

J'ai bien tenter un "=MIN(SI(A:A="toto;B:B;"")) mais ça ne fonctionne pas à tous les coups. Notamment, ça ne fonctionne pas si la cellule de destination est sur une autre feuille.

Pouvez-vous m'aider ?

Merci d'avance

5 réponses

Charly45 Messages postés 319 Statut Membre 19
 
Salut,

Je pense qu'avec cette formule =MIN(SI(A1:B7="toto";A1:B7)) et en la validant en appuyant simultanément sur Ctrl Shift et Enter - formule matricielle.
Cela doit fonctionner

A +
0
redrum
 
Merci pour la réponse.

Bon finalement, ça marche avec : "=MIN(SI(A1:A7="toto";B1:B7;""))

Le problème est que dans la réalité, le nombre de lignes est inconnu donc j'ai besoin plutot d'une formule du genre :

=MIN(SI(A:A="toto";B:B;""))

Mais malheureusement, ça ne marche pas.

Quelqu'un a une idée ?
0
Mike-31 Messages postés 19572 Date d'inscription   Statut Contributeur Dernière intervention   5 140
 
Salut,

C'est pas un problème,

Nommes tes plages,

La matrice A1 à B250 par exemple Insertion/Nom/Définir dans nom dans le classeur tu saisis un nom ex. ma_plage tu cliques dans fait référence à et tu mets en surbrillance ton tableau avec des lignes supplémentaire pour l'extension possible des saisies

ensuite tu refais la même chose pour la plage contenant les valeurs. (si ma_plage s'arréte à la cellule B250 ta plage de valeur sera B1:B250) et nommée par ex. mes_valeurs

Dans ce cas la formule sera

=MIN(SI(ma_plage="toto";mes_valeurs;""))

Toujours déclarée en matricielle Ctrl +Shift et Enter

A+
0
redrum
 
Merci mais non, ça ne peut pas fonctionner dans mon cas.

Si j'ajoute des lignes et que je ne pense pas à modifier la propriété du nom que j'aurais défini, ça ne fonctionnera pas.

je voudrais quelque chose qui fonctionne sans définir de noms

C'est pour cela que j'avais pensé à =MIN(SI(A:A="toto";B:B;"")) mais comme dis plus haut, ça ne fonctionne pas.
0
Mike-31 Messages postés 19572 Date d'inscription   Statut Contributeur Dernière intervention   5 140
 
Erreur,
si tu inséres des lignes dans la zone nommée, la zone nommée les prend en compte automatiquement sans avoir à modifier la plage nommée ou ta formule.

il en est de même avec une formule de ce genre, toute ligne insérée entre la ligne 1 et 50 sera automatiquement prise en charge, comme pour les colonnes dailleurs toute colonne insérée entre A et B sera prise en compte dans la formule

=MIN(SI(A1:B50="toto";B1:B50;""))

Par contre si tu inséres une ligne au dessous ou au dessus de ta zone nommée elle n'est pas prise en compte, ce qui est normal.

A+
0
redrum
 
Merci pour ton aide. Evidemment, je prenais le cas où j'ajoute des lignes en dessous de la zone définie par un nom, ce qui m'arrive très souvent. Par rapport à la complexité de mon fichier, je ne peux pas me permettre de renommer chaque fois la zone dès que j'ajoute une ligne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JvDo Messages postés 2012 Statut Membre 859
 
Bonjour,

en gardant la formule de Mike-31 : =MIN(SI(ma_plage="toto";mes_valeurs;"")), tu peux créer le nom de façon dynamique ce qui t'évite d'insérer des lignes mais t'oblige quand même à avoir une continuité dans ta colonne A.

Pour cela tu nommes ma_plage avec la formule : =DECALER(Feuil1!$A$1;0;0;NBVAL(Feuil1!$A:$A);1)
et mes_valeurs avec : =DECALER(Feuil1!$A$1;0;1;NBVAL(Feuil1!$A:$A);1)

si tu as une ligne de titre, il faut mettre 1 à la place du premier 0 de DECALER() et soustraire 1 de NBVAL()

cordialement
0
redrum
 
Merci our ton aide. Bonne idée que de compter les lignes. Je teste cela et te dit si ça me convient dans la pratique.
0