Rapport de message :*
 

Re: matricielle 2 plages d'ampleur inégale

Titre du sujet : Re: matricielle 2 plages d'ampleur inégale
par JeanMarie le 28/05/2007 09:49:55

Bonjour

Après des heures de recherche (sisi)

Une formule matricielle à mettre en D3,
valable pour toutes les couleurs, sauf la "KO", à tirer vers la droite et vers le bas
=SOMME(FREQUENCE(SI(($A$18:$A$29=$A3)*(ESTNUM(EQUIV($B$18:$B$29;$C$8:$C$15;0)));LIGNE($A$1:$A$12));SI(ESTNUM(EQUIV($C$8:$C$15;$B$18:$B$29;0));EQUIV($C$8:$C$15;$B$18:$B$29;0);))*D$8:D$16)


Le problème dans les multiplications de matrices, c'est qu'elles doivent être de longueur identique. Pour passer une matrice "Verte" à une matrice "jaune", je suis passé par la fonction FREQUENCE, qui va retourner une matrice de 1 et de 0

  • Le premier argument :

  • contient les numéros d'index qui correspondent à la couleur voulue indiquée en $A3, ($A$18:$A$29=$A3)
    (ESTNUM(EQUIV($B$18:$B$29;$C$8:$C$15;0)) permet de savoir si la référence est présente dans la plage "jaune"
    LIGNE($A$1:$A$12), retourne le numéro d'index, la longueur de la plage doit être identique à la longueur de la plage "verte" et doit commencer à la ligne 1.
    Résultat de la matrice {0;0;3;0;0;6;0;0;0;0;0;12}

  • Le deuxième argument :

  • contient les numéros d'index des références de la matrice "jaune" dans la matrice "verte", ce numéro est retourné par la fonction EQUIV
    la condition permet d'écarter les références "KO" non présentent dans la matrice "verte", ce qui provoquerait une erreur par la suite.
    Résultat de la matrice {2;3;0;1;4;6;12;10}

    La fonction fréquence va retourner une matrice qui sera ensuite multipliée par la plage D$8:D$16, vous pouvez noter que cette plage est plus longue d'une unité, en effet fréquence rajoute une unité supplémentaire à la longueur de la matrice de départ.
    Résultat de la matrice {0;1;0;0;0;1;1;0;0}


    Formule pour la cellule D5, donc uniquement à tirer vers la droite
    =SOMMEPROD(ESTNA(EQUIV($C$8:$C$15;$B$18:$B$29;0))*D$8:D$15)

    la partie ESTNA(EQUIV($C$8:$C$15;$B$18:$B$29;0)), permet de tester la non présence de la référence de la plage "jaune", dans la plage "verte"

    J'espère que mes explications sont suffisantes, dans le cas contraire n'hésite pas, cela me permet aussi de m'améliorer.

    @+Jean-Marie