Bonjour,
Avant de répondre à ta question sur la formule proposée, je voudrais dire que le plus simple pour toi serait d'utiliser un tableau ressemblant au dernier tableau proposé par Pierre avec les bornes inférieures (planchers) des intervalles.
Si on veut lire le poids p d'un envoi dans ton tableau, il y a deux possibilités :
- 1er cas: p apparait dans ta liste croissante de poids (20...3000) de la plage B$1$:K$1$ et le calcul EQUIV(p;B$1$:K$1$;0) renvoie le rang de la colonne du tableau dans laquelle il faudra lire le prix.
- 2ème cas: p n'apparait pas dans cette liste et le même calcul renvoie la valeur d'erreur #N/A.
d'où l'idée d'employer le 1 comme troisième paramètre de la fonction EQUIV.
- 1er cas: le calcul EQUIV(p;B$1$:K$1$;1) renvoie toujours le rang de la colonne du tableau dans laquelle il faudra lire le prix.
- 2ème cas: le calcul EQUIV(p;B$1$:K$1$;1) ne renvoie plus la valeur d'erreur #N/A pour ce poids p mais il renvoie le rang du plancher de l'intervalle contenant p au lieu du rang du plafond de cet intervalle et il faut ajouter 1 pour passer à la colonne de ce plafond.
Mais il ne faut ajouter 1 au résultat donné que dans le 2ème cas et pas dans le 1er , d'où un calcul de la forme :
EQUIV(p;B$1$:K$1$;1) + terme conditionnel ,
ce terme conditionnel prenant la valeur 0 dans le 1er cas et la valeur 1 dans le 2ème cas.
La fonction ESTNA nous permet d'écrire ce terme conditionnel puisque ESTNA(calcul) donne la valeur logique FAUX donc la valeur numérique associée 0 lorsque le calcul écrit entre parenthèses renvoie une valeur numérique (ce que fait EQUIV(p;B$1$:K$1$;0) dans le 1er cas) et la valeur logique VRAI donc la valeur numérique associée 1 lorsque le calcul écrit entre parenthèses renvoie la valeur d'erreur #N/A (ce que fait EQUIV(p;B$1$:K$1$;0) dans le 2ème cas).
D'où un calcul de la forme :
= EQUIV(p;B$1$:K$1$;1) + ESTNA(EQUIV(p;B$1$:K$1$;0))
Deuxième problème :
Comme ta liste de poids ne commence pas à 0 (ou 1) mais au premier seuil 20, pour tous les poids de lettre p inférieurs à 20g même EQUIV(p;B$1$:K$1$;1) renvoie le signal d'erreur #N/A et la formule complète renvoie le même signal d'erreur.
d'où le remplacement de EQUIV(p;B$1$:K$1$;1) par SIERREUR(EQUIV(p;B$1$:K$1$;1);0).
Pour une lettre pesant 15 g par exemple, on aura :
= SIERREUR(EQUIV(15;B$1$:K$1$;1);0) + ESTNA(EQUIV(15;B$1$:K$1$;0))
qui donne : = SIERREUR(#N/A ; 0) + ESTNA(#N/A)
soit = 0 + 1
= 1
ce qui renvoie lire le prix dans la première colonne du tableau donc la colonne des 20g.
Enfin, pour un poids dépassant 3000g, la formule précédente renverra 10 + 1 soit 11 qui est un numéro de colonne hors du tableau qui ne contient que 10 colonnes d'où la valeur d'erreur #REF avec la formule
= INDEX (ligne; 11)
ce qui peut se corriger avec un SIERREUR (INDEX(ligne;colonne);"trop lourd").
D'où la formule finale :
=SIERREUR(INDEX($B$2:$K$9;EQUIV(C15;$A$2:$A$9;0);SIERREUR(EQUIV(D15;$B$1:$K$1);0)+ESTNA(EQUIV(D15;$B$1:$K$1;0)));"trop lourd")
En suivant le conseil de Pierre et en remplissant les cellules vides (remplies en italique ci-dessous) qui sont un véritable ennui dans un tableau, on pourrait avoir toutes les réponses voulues.
Il suffit au cas d'écrire les contenus des anciennes cellules vides avec la couleur du fond de cellule pour obtenir la présentation de départ du tableau.
Dernière remarque : on peut supprimer le champ 1500g.
Cordialement
Claude
Partager