Tentative d'explication de la formule:
=SI(SOMMEPROD(($C$6:$C$437=DATE(2006;(3*(LIGNE()-442)+12);1))*(D$6:D$437<>"" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+13;1))*(D$6:D$437<>"" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+14;1))*(D$6:D$437<>"" ))=0;"";SOMMEPROD(($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+12;1))*(D$6:D$437="JUSTE" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+13;1))*(D$6:D$437="JUSTE" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+14;1))*(D$6:D$437="JUSTE" ))/SOMMEPROD(($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+12;1))*(D$6:D$437<>"" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+13;1))*(D$6:D$437<>"" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+14;1))*(D$6:D$437<>"" )))
1) J’ai remarqué que dans ta colonne C, depuis C6 jusqu’à C437 tu avais défini tes mois dans des cellules au format DATE , par exemple : pour afficher mai-08 tu as saisi 01/05/2008.
2) J’ai constaté aussi qu’au regard de chaque date, dans les colonnes D….etc. tu avais trois possibilités de contenu : « JUSTE » « FAUX « ou rien (« « ). A noter que FAUX est suivi d’un espace, ce qui n’est pas évident pour les comparaisons, c’est pourquoi j’ai essayé de ne pas avoir à l’utiliser pour contourner les erreurs de saisie (absence d’espace) sans avoir à utiliser la fonction qui supprime les espaces avant et après le contenu de la cellule (ce qui aurait allongé la longueur de la formule.
3) J’ai supposé, à la lecture de la formule que tu proposais, que tu voulais obtenir, par saison, le pourcentage de réussite des prévisions par rapport au total des prévisions effectives.
avec pour définition des saisons :
HIVER 2008 = 01/12/2007 + 01/01/2008 + 01/02/2008
PRINTEMPS 2008 = 01/03/2008 + 01/04/2008 + 01/05/2008
etc…
On doit donc, pour la cellule D446, par exemple, calculer le nombre de fois où JUSTE est présent pour les 3 mois d’HIVER 2008.
La fonction SOMMEPROD va permettre de le faire .
Prenons DATE1=date(2007 ;12 ;1), MATRICE1 =C6 :C437, MATRICE2= D6 :D437
CRITERE1 = (MATRICE1=DATE1)
CRITERE2 = (MATRICE2= »JUSTE »)
SOMMEPROD((CRITERE1)*(CRITERE2))
nous donnera les résultats suivants :
Si un élément de MATRICE1 est = DATE1 alors CRITERE1 sera = 1 sinon = 0
Si l’élément correspondant de MATRICE2 est = « JUSTE » alors CRITERE2 sera = 1 sinon = 0
Nous aurons donc :
(CRITERE1)*(CRITERE2)= 1*0 = 0 si la date est bonne mais « JUSTE » absent
(CRITERE1)*(CRITERE2)= 1*1 = 1 si la date est bonne et « JUSTE » présent
(CRITERE1)*(CRITERE2)= 0*1 = 0 si la date est # de celle recherchée et « JUSTE » présent. SOMMEPROD fait la somme de tous les 1 trouvés. Nous avons donc le nombre de « JUSTE » pour Décembre 2007
SOMMEPROD va balayer ainsi toute la MATRICE1 (et MATRICE2) et faire le cumul des 0 ou 1 trouvés
Le cumul devant se faire sur trois mois pour une saison, nous écrirons
SOMMEPROD((CRITERE1)*(CRITERE2)+ (CRITERE3)*(CRITERE2)+ (CRITERE4)*(CRITERE2))
SOMMEPROD((C6:C437=DATE1)*( D6:D437= »JUSTE »)+ (C6:C437=DATE2)*( D6:D437= »JUSTE »)+ (C6:C437=DATE3)*( D6:D437= »JUSTE »))Passons au calcul des dates, en fonction d’une ligne donnée.
La fonction DATE(A,M,J) délivre une date sous la même forme que ce qui est mémorisé dans C6 :C437
La fonction LIGNE() donne le numéro de ligne de la cellule où se trouve la formule
Sachant qu’en D446 je dois définir les 3 mois cités plus haut, je dois avoir pour premier mois
01/12/2007 soit le 24 éme mois à partir du 01/01/2006
DATE(2006;(3*(LIGNE()-442)+12);1)
3*(LIGNE()-442)+12 me définit bien le 24ème mois depuis l’origine
DATE(2006 ;24 ;1) donnera 01/12/2007
Les DATE2 et DATE3 seront donc définies respectivement par :
DATE(2006;(3*(LIGNE()-442)+13);1), soit 01/01/2008
Et
DATE(2006;(3*(LIGNE()-442)+14);1) soit 01/02/2008
Lorsque je descends d’une ligne, par exemple en D447, la fonction DATE donnera pour le premier mois de la saison : DATE(2006 ;3*(447-442)+12 ;1)
Ou encore DATE(2006 ;27 ;1) soit 01/03/2008
Etc etc…
Le SOMMEPROD devient enfin :
SOMMEPROD(($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+12;1))*(D$6:D$437="JUSTE" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+13;1))*(D$6:D$437="JUSTE" )+($C$6:$C$437=DATE(2006;3*(LIGNE()-442)+14;1))*(D$6:D$437="JUSTE" ))
Je ne réexplique pas le rôle des $ dans l’adresse de cellules, cela a déjà été fait plus haut par olivthill
Voilà !!!
J’espère avoir assez détaillé et pas trop.
Si tu comprends, BRAVO, sinon, à ta disposition pour complèter en MP pour ne pas sursaturer le post.
Message édité par seniorpapou le 06-11-2009 à 14:29:28