XL 2010 Ecart type avec plusieurs critères

Naylek

XLDnaute Nouveau
Bonjour à tous,

Je souhaite calculer l'écart type d'un indice en conditionnant par les dates (sur une année seulement, par trimestre...).
Peut-être sauriez-vous m'aider à la construire par une matricielle ou bien avec =BDECARTYPE (je n'y suis pas arrivé).

Vous trouverez ci-joint le fichier contenant les données et les tableaux à remplir. J'ai aussi détaillé le calcul de l'écart type pour faciliter sa compréhension.
 

Pièces jointes

  • Test Volatilité.xlsx
    31.5 KB · Affichages: 3

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Naylek :) .
Pour les annés, une formule matricielle en i5 à copier vers bas :
VB:
=ECARTYPE.STANDARD(SI(ANNEE($A$3:$A$9999)=H5;$B$3:$B$9999))

Pour les trimestres, une formule matricielle en i11 à copier vers le bas :
VB:
=ECARTYPE.STANDARD(SI((($A$3:$A$9999>=DATE("2022";3*(STXT(H11;2;1))-2;1))*($A$3:$A$9999<=FIN.MOIS(DATE("2022";3*(STXT(H11;2;1));1);0)))>0;$B$3:$B$9999;""))
 

Pièces jointes

  • Naylek- Test Volatilité- v1.xlsx
    32.6 KB · Affichages: 2

Naylek

XLDnaute Nouveau
Bonjour @Naylek :) .
Pour les annés, une formule matricielle en i5 à copier vers bas :
VB:
=ECARTYPE.STANDARD(SI(ANNEE($A$3:$A$9999)=H5;$B$3:$B$9999))

Pour les trimestres, une formule matricielle en i11 à copier vers le bas :
VB:
=ECARTYPE.STANDARD(SI((($A$3:$A$9999>=DATE("2022";3*(STXT(H11;2;1))-2;1))*($A$3:$A$9999<=FIN.MOIS(DATE("2022";3*(STXT(H11;2;1));1);0)))>0;$B$3:$B$9999;""))
T'es un chef, merci beaucoup ! Juste pour ma culture : peux-tu m'expliquer comment se structure la fonction SI avec plusieurs critères ? (j'ai toujours voulu la faire sans y arriver...)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Juste pour ma culture : peux-tu m'expliquer comment se structure la fonction SI avec plusieurs critères ? (j'ai toujours voulu la faire sans y arriver...)
Pour une formule non matricielle les ET/OU suffisent amplement.

Mais quand on passe sur une plage, ça ne fonctionne plus car le ET (respectivement OU) fait son calcul sur l'ensemble des cellules de la plage et renvoie une valeur unique (soit VRAI soit FAUX) alors qu'on voudrait en retour une matrice de VRAI et FAUX.

L'astuce est que FAUX est associé à zéro et le reste est considéré comme VRAI.

Dans une expression algébrique (dont au moins avec les sommes et les multiplications et leurs combinaisons), VRAI est converti en 1 et FAUX est converti en 0.

Dans une expression algébrique avec des VRAIS et des FAUX, l'opération produit (*) est équivalent à un ET et l'opération somme est équivalent à un OU :
  • ET(A;B) peut s'écrire A*B
  • OU(A;B) peut s'écrire A+B
  • ET(A;(OU(B;C) peut s'écrire A * (B + C) avec A ,B, C VRAI ou FAUX
De plus quand on agit sur une matrice (le plus souvent en colonne), quand on écrit pour la plage (X1:X5)*(Y1:Y5), le résultat est une matrice contenant { X1*Y1 , X2*Y2 , X3*Y3 , X4*Y4 , X5*Y5 }

On va donc combiner tout cela, dans une formule matricielle.

Imaginons que X1 à X5 soient des dates et qu'on cherche si ces dates sont dans le premier trimestre (indépendamment de l'année) :
On écrira : (mois(X1:X5)>=1) * ((mois(X1:X52)<=3) ce qui nous donnera une matrice 5 éléments VRAI ou FAUX.
Par exemple pour connaitre le nombre de dates du 1ier trimestre, on écrira =somme( (mois(X1:X5)>=1) * (mois(X1:X52)<=3) ) (on a une somme de 1 et 0 - les 1 correspondant aux dates du 1ier trimestre)

On peut aussi utiliser une fonction matricielle SI() qui renvoie quelque chose quand c'est VRAI et autre chose quand c'est FAUX.
Par exemple, on renvoie la valeur de la colonne Y quand c'est VRAI et "" quand c'est FAUX:
=si ( ((mois(X1:X5)>=1) * (mois(X1:X52)<=3))>0;Y1:Y5;""). On a donc pour résultat une matrice de 5 éléments qui prennent la valeur de la colonne Y si le mois est dans le 1ier trimestre ou qui valent "" dans le cas contraire.

On sait que la fonction écart type ne prend en compte que les valeurs numérique donc on peut réduire à :
=si ( ((mois(X1:X5)>=1) * ((mois(X1:X52)<=3))>0;Y1:Y5) (Excel renvoie FAUX si l'expression n'est pas VRAI - et FAUX n'est pas considéré comme numérique par la fonction écart type)
Sachant que la condition a forcément pour résultat soit 1 soit 0, on pourrait encore réduire à :
=si ( (mois(X1:X5)>=1) * (mois(X1:X52)<=3) ; Y1:Y5)

On arriverait donc à la formule matricielle :
=ECARTYPE.STANDARD( si ( (mois(X1:X5)>=1) * (mois(X1:X52)<=3) ; Y1:Y5) )


Voilà, voilà. Si pas clair, me redemander.
 

Pièces jointes

  • Naylek- Test Volatilité- v2.xlsx
    10.4 KB · Affichages: 2
Dernière édition:

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg