Bonjour,
je bloque sur un problème pouvant sembler simple...
... mais ne l'étant à priori pas
je dispose d'une suite de nombre (de -50 à +50) avec décimales et souhaites les discrétiser de 0,5 en 0,5.
Le soucis est que cette discrétisation ne correspond pas à un arrondi : je change de classe à 0,3 et 0,7
par exemple:
1,1 doit donner 1
1,29 doit donner 1
1,3 doit donner 1,5
27,7 doit donner 27,5
-3,71 doit donner -4
etc.
le coté négatif ou positif se gère facilement avec ABS().
pour la discrétisation, c'est moins simple.
- Ma première approche a été d'user du SI mais il y a trop de critères. On pourrait faire les calculs sur plusieurs colonnes pour travailler sur des tranches. Ça marche sans être élégant.
- en second lieu, j'ai tenté de concaténer l'unité avec une décimale arrondie en utilisant la fonction STXT mais cette fonction accepte visiblement mal les formules (>= et OU() par exemple) car elle reconnait mon nombre comme du texte).
- en dernier point, j'ai associé du si avec du stxt pour déterminer une décimale de 0, 5 ou 10 puis additionné le chiffre des unités avec cette décimale. le résultat est probant sauf pour les valeurs n,7 exactement qui devraient être arrondies à n,5 et le sont à n+1. Je continue à ne pas trouver ça très élégant.
formule de la première approche pour une petite partie de la plage :
=SI(ABS(P17)>=0.3;SI(ABS(P17)>0.7;SI(ABS(P17)>=1.3;SI(ABS(P17)>1.7;SI(ABS(P17)>=2.3;SI(ABS(P17)
>2.7;SI(ABS(P17)>=3.3;SI(ABS(P17)>3.7;SI(ABS(P17)>=4.3;SI(ABS(P17)>4.7;"trop";4.5);4);3.5);3);2.5);2);
1.5);1);0.5);0)*P17/ABS(P17)
Formule complète de la dernière approche :
=(ENT(ABS(E22))+SI(STXT(ABS(E22);3;1)="0";0;SI(STXT(ABS(E22);3;1)="1";0;SI(STXT(ABS(E22);3;1)="2";
0;SI(STXT(ABS(E22);3;1)="7";1;SI(STXT(ABS(E22);3;1)="8";1;SI(STXT(ABS(E22);3;1)="9";1;0.5)))))))*E22/ABS(E22)
Merci à celles ou Ceux qui auront pris un peu de temps (voir de plaisir) à chercher la solution.