Fonction Si

Bonjour tout le monde,

En PJ j'ai rédigé une fonction Si imbriquée qui correspond à une grille tarifaire qui change en fonction du poids.

Cependant, ma grille s'arrête à 31kgs, et je veux introduire une condition dans la même formule qui stipule qu'au delà de 31 et à chaque ajout d'une unité le prix augmentera de 1 aussi.

càd : 31 = 70 - 32 = 71 - 33 = 72 - 34 = 73 et ainsi de suite

Merci beaucoup pour votre aide et je reste à votre disposition pour mieux éclairer ma demande.

18fonction-si.xlsx (10.39 Ko)

Bonjour,

Ci-joint ma proposition. Ce n'est pas tout à fait optimisé mais ça devrait être fonctionnel.

J'ai remplacé la condition du SI() :

  • Si c'est supérieur à 30 kg, le calcul suivant se fait : 68€ + (Poids - 30 kg) * 1€/kg
  • Si c'est inférieur à 30 kg, il cherche la valeur exacte dans le tableau que j'ai rajouté

Ce n'est pas optimisé car il faut rentrer un poids qui figure dans le tableau donc uniquement des entiers (pas de 15,6 kg par exemple). Je sais qu'on peut le faire en VBA mais je sèche pour une solution plus simple.

Je vous laisse corriger les prix du tableau, au moins vous pourrez les faire évoluer

Salut Miamin !

J'ai exploité le point commun entre tes "groupes de kilos" on va dire, et du coup je t'ai fais une formule plus courte :

Le point commun c'est :

entre 2 et 5 kg, on ajoute 33 au nb de kilos pour obtenir le prix,

entre 6 et 10 kg, on ajoute 34 au nb de kilos pour obtenir le prix,

entre 11 et 15 kg, on ajoute 35 au nb de kilos pour obtenir le prix,

entre 16 et 20 kg, on ajoute 36 au nb de kilos pour obtenir le prix,

entre 21 et 25 kg, on ajoute 37 au nb de kilos pour obtenir le prix,

entre 26 et 30 kg, on ajoute 38 au nb de kilos pour obtenir le prix,

entre 31 et 35 kg, on ajoute 39 au nb de kilos pour obtenir le prix,

=SI(ET(A2>1;A2<=5);A2+33;SI(ET(A2>5;A2<=10);A2+34;SI(ET(A2>10;A2<=15);A2+35;SI(ET(A2>15;A2<=20);A2+36;SI(ET(A2>20;A2<=25);A2+37;SI(ET(A2>25;A2<=30);A2+38;SI(ET(A2>30;A2<=35);A2+39;"pas de consigne !")))))))

Bonjour à tous

Un essai à tester. Te convient-il ?

Bonjour,

Une formule un peu plus courte ne serait pas du luxe !

edit : Une petite erreur, je recalcule !

Voilà rajustée :

=SI(A2<=1;30;SI(A2<31;ENT((ARRONDI.SUP(A2;0)-1)/5)*6+38-(ENT((ARRONDI.SUP(A2;0)-1)/5)+1)*5+ARRONDI.SUP(A2;0);70+ARRONDI.SUP(A2;0)-31))

Un peu plus long que prévu avec les arrondis...

Cordialement

Bonjour,

Votre problème est assez simple à résoudre au final, il suffit de rajouter à votre formule un petit paramètre :

=SI(A2<=1;30;SI(A2<=2;35;SI(A2<=3;36;SI(A2<=4;37;SI(A2<=5;38;SI(A2<=6;40;SI(A2<=7;41;SI(A2<=8;42;SI(A2<=9;43;SI(A2<=10;44;SI(A2<=11;46;SI(A2<=12;47;SI(A2<=13;48;SI(A2<=14;49;SI(A2<=15;50;SI(A2<=16;52;SI(A2<=17;53;SI(A2<=18;54;SI(A2<=19;55;SI(A2<=20;56;SI(A2<=21;58;SI(A2<=22;59;SI(A2<=23;60;SI(A2<=24;61;SI(A2<=25;62;SI(A2<=26;64;SI(A2<=27;65;SI(A2<=28;66;SI(A2<=29;67;SI(A2<=30;68;SI(A2<=31;70;SI(A2>31;A2+39))))))))))))))))))))))))))))))))

Cordialement.

PS : Le "+39" vient simplement de la soustraction 70-31.

Edit : La formule ne tient pas. Voici votre fichier.

5fonction-si-2.xlsx (10.65 Ko)

Grand merci à tous

C'est la solution de MFerrand qui correspond parfaitement à mon besoin car elle ne crée pas les fractions dans les prix.

Par ailleurs, MFerrand, je vous sollicite de m'expliquer davantage la syntaxe de votre fonction.

Merci d'avance

MFerrand a écrit :

Bonjour,

Une formule un peu plus courte ne serait pas du luxe !

edit : Une petite erreur, je recalcule !

Voilà rajustée :

=SI(A2<=1;30;SI(A2<31;ENT((ARRONDI.SUP(A2;0)-1)/5)*6+38-(ENT((ARRONDI.SUP(A2;0)-1)/5)+1)*5+ARRONDI.SUP(A2;0);70+ARRONDI.SUP(A2;0)-31))

Un peu plus long que prévu avec les arrondis...

Cordialement

Pour info : j'ai repris la formule de gaz0line qui me paraissait simple et je l'ai adaptée pour qu'elle donne le résultat souhaité !

=SI(A2<=1;30;SI(ET(A2>1;A2<=5);A2+33;SI(ET(A2>5;A2<=10);A2+34;SI(ET(A2>10;A2<=15);A2+35;SI(ET(A2>15;A2<=20);A2+36;SI(ET(A2>20;A2<=25);A2+37;SI(ET(A2>25;A2<=30);A2+38;SI(A2>30;A2+39))))))))

Si çà peut t'aider je le met Même si j'arrive un peu tard

Je n'ai pas non plus de décimales et je n'ai pas besoin de passer par un arrondi !

Bonjour à tous ! Bien dormi.

OK pour expliquer la formule : les imbrications de SI posent toujours des problèmes de niveaux d'imbrications et aboutissent à de formules longues... Si on ne peut éviter SI, le mieux est sans doute de fractionner le calcul dans des formules nommées qui restent transparentes dans le tableur une fois établies...

La solution classique est un barème utilisé avec RECHERCHEV. Seulement dans le cas présent les bornes (1, 2, 3 ...) sont rattachées au palier inférieur, qui obligerait à "bidouiller" les bornes (1,01 ou 1,001 selon intervalles de poids admissibles, au lieu de 1 et ainsi de suiite). C'est malcommode si on peut trouver autre chose.

Enfin, une autre solution consiste à trouver un algorithme de calcul pour tout ou partie du barème, ce qui permet soit de calculer directement à partir du poids, soit de calculer par grandes tranches en limitant le nombre de SI.

Ici, il apparaît rapidement 3 grandes tranches :

1) <=1 tranche isolée, avec son barème (rien à calculer).

2) >=31 où le barème augmente de 1 par tranche de poids d'1 kg. A partir de 70 pour 31 kg, on peut calculer facilement : +1 pour poids-31 [les bornes constituant la partie supérieure du palier, il convient d'arrondir les poids au kg supérieur pour les assimiler à leur borne].

[NB- J'aurais dû mettre dans la formule, pour le 2e SI : ARRONDI.SUP(A2;0)<31 au lieu de A2<31 ; mais l'écart de barème entre 30 et 31 étant le même qu'entre 25 et 26 ou entre 20 et 21 etc., le calcul de la 3e tranche (intermédiaire) donne le bon résultat et le donnerait jusqu'à 35...]

3) >1 et <31 Pour cette tranche intermédiaire, on constate que pour les poids : 5, 10, 15, 20, 25, 30 on a : 38, 44, 50, 56, 62, 68, soit un écart de 6 régulier par tranches espacées de 5 kg, pour les tranches intermédiaires entre ces tranches de 5 en 5 kg, le barème étant à diminuer de 1 par kg.

Cette progression étant régulière, on peut mettre en formule : pour les poids de cette grande tranche on recherche le barème pour la tranche des 5 kg supérieur, ce que donne : ENT((ARRONDI.SUP(A2;0)-1)/5)*6+38 [38 étant le barème pour 5 kg]

duquel il faut enlever par kg séparant le poids de la tranche de 5 kg supérieure, soit : -(poids arrondi aux 5 kg supérieur - poids arrondi au kg supérieur) [en ôtant les parenthèses, le - intérieur devient +] :

-(ENT((ARRONDI.SUP(A2;0)-1)/5)+1)*5+ARRONDI.SUP(A2;0)

Voilà pour l'explication.

Cordialement

Rechercher des sujets similaires à "fonction"