SOMME.SI : résultats erronés/syntaxe et plages correctes

nightswan

XLDnaute Junior
Bonsoir,

J'ai besoin d'un petit coup de main avec la fonction SOMMEPROD.
Je pense que c'est ce que je dois utiliser, mais je n'arrive pas à la mettre en place.

La problématique est exposée dans le fichier joint.

Merci d'avance.
 

Pièces jointes

  • nb ctrl.xlsx
    10.9 KB · Affichages: 104
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir nightswan,

Essayez cette formule matricielle en K4:
Code:
=SOMME(--(FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)) >0))

Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
 

Pièces jointes

  • nb ctrl v1.xlsx
    11.5 KB · Affichages: 83
Dernière édition:

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir,

Merci pour ta formule matricielle, je ne suis absolument pas familier avec ça, mais je viens de transposer ta solution dans mon "vrai" tableau et ça fonctionne très bien.
Par contre, j'aimerai que tu me détailles un peu la syntaxe, histoire de comprendre un peu mieux comment c'est construit.

=SOMME(--(FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)) >0))
Mis à part les plages D3:D34 et F3:F34, pour le reste, je n'ai pas tout suivi (je ne connais pas la fonction FREQUENCE).
Je m'interroge surtout sur ces "--" en tête de formule et cet espace après le SI( avant la plage D3:D34.
Après, je peux aller me documenter, merci encore pour ton aide. ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir nightswan,

Je m'interroge surtout sur ces "--" en tête de formule

Une fonction matricielle va appliquer la formule à chacune des valeurs de la plage (indiquée dans la formule) et renvoyer une matrice dont chaque élément est le résultat de la formule pour chacune des valeurs.

exemple: si A1=3, A2=2, A3=1, A4=4 et A5=5, et si la formule matricielle est {=A1:A5>=3}
Alors la formule matricielle renvoit la matrice : {VRAI;FAUX;FAUX;VRAI;VRAI}

Si on veut compter le nombre de VRAI, on pourrait utiliser la formule: {=SOMME(A1:A5>=3)}
Mais VRAI et FAUX sont des valeurs logiques (boolean) et ne sont pas égales à des nombres, la formule SOMME donne 0 (aucun nombre à sommer)

On utilise le fait qu'Excel tente de convertir les valeurs logiques en nombre (FAUX en 0 et VRAI en 1) si ces valeurs sont utilisées dans des calculs. Comme opération on pourrait prendre 1* (multiplication par 1), ou 0+ (addition de zéro) ou -- (deux fois le changement de signe -- , qui revient à multiplier deux fois de suite par -1)

La formule devient donc {=SOMME(1*(A1:A5>=3))} ou =SOMME(0+(A1:A5>=3))} ou =SOMME(--(A1:A5>=3))}

Ces trois formules vont donner =SOMME(1*{VRAI;FAUX;FAUX;VRAI;VRAI}) ou
=SOMME(0+{VRAI;FAUX;FAUX;VRAI;VRAI}) ou =SOMME(--{VRAI;FAUX;FAUX;VRAI;VRAI}).

soit =SOMME({1*VRAI;1*FAUX;1*FAUX;1*VRAI;1*VRAI}) ou =SOMME({0+VRAI;0+FAUX;0+FAUX;0+VRAI;0+VRAI}) ou
=SOMME({--VRAI;--FAUX;--FAUX;--VRAI;--VRAI}).

Ces trois formule vont toutes aboutir à: =SOMME({1;0;0;1;1}) soit la valeur 3.

(je ne connais pas la fonction FREQUENCE)
La fonction fréquence nécessite deux plages de valeurs:=FREQUENCE(PlageADistribuer,PlageBornes)

PlageADistribuer représente une plage de nombres à ventiler dans des intervalles dont les bornes sont indiquées par la plage PlageBornes.

ex: A1=1, A2=2, A3=3, A4=1; A5=10, A6=5; A7=7; A8=3, A9=5 soit {1;2;3;1;10;5;7;3;5}
B1=2, B2=5, B3=8 soit {2;5;8)

=FREQUENCE(A1:A9;B1:B3) soit =FREQUENCE( {1;2;3;1;10;5;7;3;5};{2;5;8)) va renvoyer une matrice de quatre éléments (le nombre d'éléments de B1:B3 +1) égale à {3;4;1;1}

  • 1er élém: 3 (car il y a 3 valeurs dans {1;2;3;1;10;5;7;3;5} <= à 2)
  • 2eme élém: 4 (car il y a 4 valeurs dans {1;2;3;1;10;5;7;3;5} > à 2 et <=5)
  • 3eme élém: 1 (car il y a 1 valeur dans {1;2;3;1;10;5;7;3;5} > à 5 et <=8)
  • 4eme élém: 1 (car il y a 1 valeur dans {1;2;3;1;10;5;7;3;5} > à 8)


Une forme particulière de FREQUENCE: les deux intervalles sont les mêmes.
=FREQUENCE({1;2;3;1;10;5;7;3;5};{1;2;3;1;10;5;7;3;5})

Pour faciliter, on peut lister les bornes de manière unique:{1;2;3;5;7;10; supérieur à 10}, on a donc les intervalles possibles ]-infini,1], ]1,2], ]2,3], ]3,5], ]5,7], ]7,10], ]10,+infini]
.
  • 1 er élém: 2 (car il y a 2 valeurs de {1;2;3;1;10;5;7;3;5} dans ]-infini,1] correspondant à l'intervalle du 1er élém de {1;2;3;1;10;5;7;3;5}
  • 2 eme élém: 1 (car il y a 1 valeur dans ]1,2] correspondant à l'intervalle du 2eme élém de {1;2;3;1;10;5;7;3;5}
  • 3 eme élém: 2 (car il y a 1 valeur dans ]2,3] correspondant à l'intervalle du 3eme élém de {1;2;3;1;10;5;7;3;5}
  • 4 eme élém: 0 (il y a bien 2 valeurs dans ]-infini,1] correspondant à l'intervalle du 4eme élém de {1;2;3;1;10;5;7;3;5} mais ces valeurs ont déjà été comptées).
  • 5 eme élém: 1 (car il y a 1 valeur dans ]7,10] correspondant à l'intervalle du 5eme élém de {1;2;3;1;10;5;7;3;5}
  • 6 eme élém: 2 (car il y a 2 valeurs dans ]3,5] correspondant à l'intervalle du 6eme élém de {1;2;3;1;10;5;7;3;5}
  • 7 eme élém: 1 (car il y a 1 valeur dans ]5,7] correspondant à l'intervalle du 7eme élém de {1;2;3;1;10;5;7;3;5}
  • 8 eme élém: 0 (il y a bien 2 valeurs dans ]2,3] correspondant à l'intervalle du 8eme élém de {1;2;3;1;10;5;7;3;5} mais ces valeurs ont déjà été comptées).
  • 9 eme élém: 0 (il y a bien 2 valeurs dans ]3,5] correspondant à l'intervalle du 9eme élém de {1;2;3;1;10;5;7;3;5} mais ces valeurs ont déjà été comptées).
  • 10 eme élém: 0 (car il y a 0 valeur dans ]10,+infini] correspondant au dernier intervalle.


On obtient donc la matrice: {2;1;2;0;1;2;1;0;0;0}. On s'aperçoit que cette forme de fréquence compte le nombre d'occurence de chaque valeur dans l'ordre d'apparition des valeurs dans {1;2;3;1;10;5;7;3;5} avec des zéros intercalés quand ce n'est pas la première apparition de la valeur.

Il suffit de compter le nombre de valeurs non nulles pour avoir le nombre d'éléments sans doublon. Pour cela on applique la formule décrite en haut de ce message: =somme(--(frequence(A1:A9;A1:A9)>0)) soit 6 (6 valeurs différentes dans {1;2;3;1;10;5;7;3;5})


Dans le cas qui nous interesse
Nous devons construire la matrice des valeurs à distribuer (qui sera la même que celles des bornes) afin de compter le nombre de jour ou A a été controlé. On utilise la formule : SI( $D$3:$D$34=J4;$F$3:$F$34)

Cette formule matricielle renvoit le jour de controle si le nom+prenom est égal à J4 et ceci pour chacun des noms de la colonne $D$3:$D$34. Si le nom n'est pas égal à J4, cette formule renvoit FAUX. on obtient une matrice du type {41275;41275;41275;41275;41275;FAUX;FAUX;FAUX;FAUX;FAUX;41306;41306;...}

41275 est le nombre représentant la date 01/01/2013, 41306 est le nombre représentant la date 01/02/2013.

Il suffit de compter les valeurs (sans doublon) pour obtenir le nombre de contrôles globaux pour la valeur J4 (une chance pour nous, la fonction FREQUENCE ne tient pas compte des valeurs non numériques donc la fonction FREQUENCE ignore les valeurs FAUX).
On obtient la formule:
Intervalle à prendre en compte :
SI( $D$3:$D$34=J4;$F$3:$F$34)

Matrice des fréquences:
FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)

Repérer les valeurs >0:
FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)>0

Transformer les valeurs VRAI ou FAUX en 1 ou 0
--(FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)>0)

Compter les valeurs >0
{=SOMME(--(FREQUENCE(SI( $D$3:$D$34=J4;$F$3:$F$34);SI( $D$3:$D$34=J4;$F$3:$F$34)>0)=}


Je m'interroge sur [..] cet espace après le SI( avant la plage D3: D34.
Concernant les espaces dans la formule, ils sont inutiles et peuvent être supprimés.
 
Dernière édition:

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Merci pour ce cours magistral, je ne m'avancerais pas en disant que la fonction fréquence et le calcul matriciel n'a plus de secret pour moi, mais c'est déjà moins flou.
Merci pour ton aide encore une fois.
 

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonjour,

Sur la base de la solution matricielle proposée la dernière fois, est-il possible d'utiliser à nouveau cette formule pour arriver à isoler cette fois le nombre de fois qu'une personne en a contrôlé une autre ?
J'ai essayé d'inclure la colonne avec les contrôleurs dans la formule existante, mais ça ne fonctionne pas.

Merci d'avance, voir fichier en PJ.
 

Pièces jointes

  • nb ctrl v2.xlsx
    12.7 KB · Affichages: 54

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir nightswan,

Sur la base de la solution matricielle proposée la dernière fois, est-il possible d'utiliser à nouveau cette formule pour arriver à isoler cette fois le nombre de fois qu'une personne en a contrôlé une autre ?

Suite à la nouvelle demande, j'ai changé mon fusil d'épaule et je passe maintenant par un Tableau Dynamique Croisé.

Pour cela, j'ai rajouté une colonne au tableau nommée "Aux" qui calcule le nombre de fois où apparait chaque triplet (Gestionnaire, Contrôleur, Date contrôle) et qui en prend l'inverse. La formule de Aux:
Code:
=SIERREUR(1/NB.SI.ENS($D$3:$D$100;D3;$E$3:$E$100;E3;$F$3:$F$100;F3);"")

Ensuite le TCD prend en ligne le champ Contrôleur, en colonne le champ Gestionnaire et en valeur la somme de Aux.

A partir duTCD, on peut connaître:
Le nombre de fois où A a contrôlé B (intersection de la ligne A et de la colonne B)
Le nombre de fois où B a été contrôlé (total de la colonne B)
Le nombre de fois où A a contrôlé un gestionnaire (total de la ligne A)

nb: N'oubliez pas d'actualiser le TCD si les valeurs sources sont modifiées. La formule de Aux accepte des valeurs jusqu'à la ligne 100; au-delà, il faut modifier la formule.
 

Pièces jointes

  • nb ctrl v3.xlsx
    16 KB · Affichages: 56

Regueiro

XLDnaute Impliqué
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir à Tous.
J'ai suivie votre discussion au demeurant très intéressante.
En PJ ma contribution sans TCD ( je ne maitrise pas bien les TCD )
Voir sur le fichier l'onglet "Essai"
A+
 

Pièces jointes

  • TCD ET NBVAL V3.xlsm
    30.2 KB · Affichages: 60
  • TCD ET NBVAL V3.xlsm
    30.2 KB · Affichages: 58
  • TCD ET NBVAL V3.xlsm
    30.2 KB · Affichages: 50

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir nightswan,

Suite à la nouvelle demande, j'ai changé mon fusil d'épaule et je passe maintenant par un Tableau Dynamique Croisé.

Pour cela, j'ai rajouté une colonne au tableau nommée "Aux" qui calcule le nombre de fois où apparait chaque triplet (Gestionnaire, Contrôleur, Date contrôle) et qui en prend l'inverse. La formule de Aux:
Code:
=SIERREUR(1/NB.SI.ENS($D$3:$D$100;D3;$E$3:$E$100;E3;$F$3:$F$100;F3);"")

Ensuite le TCD prend en ligne le champ Contrôleur, en colonne le champ Gestionnaire et en valeur la somme de Aux.

A partir duTCD, on peut connaître:
Le nombre de fois où A a contrôlé B (intersection de la ligne A et de la colonne B)
Le nombre de fois où B a été contrôlé (total de la colonne B)
Le nombre de fois où A a contrôlé un gestionnaire (total de la ligne A)

nb: N'oubliez pas d'actualiser le TCD si les valeurs sources sont modifiées. La formule de Aux accepte des valeurs jusqu'à la ligne 100; au-delà, il faut modifier la formule.

Bonsoir,

Tout comme Regueiro, je ne maîtrise pas vraiment les TCD.
Mais encore une fois, je vais creuser pour voir comment ça se met en oeuvre.
Merci pour cette solution alternative.

Bonsoir à Tous.
J'ai suivie votre discussion au demeurant très intéressante.
En PJ ma contribution sans TCD ( je ne maitrise pas bien les TCD )
Voir sur le fichier l'onglet "Essai"
A+
Bonsoir Regueiro,

Je ne parviens pas à exploiter ton fichier.
Je suis pourtant sous Excel 2007 et théoriquement, le format .xlsm est pris en charge.
J'ai validé les avertissements de sécurité, mais des formules ne fonctionnent pas. (voir PJ).
Je suis également intéressé par ta solution, qui me sera dans l'immédiat plus accessible qu'un TCD.

Cordialement.
 

Pièces jointes

  • 2013-05-21_190019.jpg
    2013-05-21_190019.jpg
    81.5 KB · Affichages: 100

Regueiro

XLDnaute Impliqué
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonsoir.
Voilà votre fichier en retour.
Voir sur l'onglet "Essai2"
La 1ère variante marche si tu as installer MoreFunc
=Valeurs.Uniques
La 2ème fonctionne avec une fonction personnalisée de Boisgontier.
Il vient de me donner la solution dans un Post.
A+
 

Pièces jointes

  • TCD ET NBVAL V3.xlsm
    38.5 KB · Affichages: 59
  • TCD ET NBVAL V3.xlsm
    38.5 KB · Affichages: 68
  • TCD ET NBVAL V3.xlsm
    38.5 KB · Affichages: 65

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

C'est bon, cette fois-ci, tout fonctionne parfaitement.
J'y jetterai un oeil plus en profondeur plus tard, afin de pouvoir recaler tout ça sur mon vrai tableau de données.

Merci pour ton aide précieuse (à toi aussi mapomme, l'option TCD est également très intéressante).

Bonne soirée.
 

nightswan

XLDnaute Junior
Re : besoin aide SOMMEPROD (ou autre fonction si besoin)

Bonjour,

J'ai ouvert le fichier de Regueiro au boulot et l'onglet "Essai2" fonctionne, malgré la version d'Office locale (2003).

Je souhaiterai caler ces formules sur mon fichier au travail, mais je rencontre divers problèmes.

J'ai constaté que les données saisies à partir de la ligne 35 ne sont pas calculées correctement dans le tableau récapitulatif. Pour résumer, il semblerait que seule la plage D3:E34 soit prise en compte.

Les listes gestionnaires et contrôleurs sont pourtant suffisamment étendues, comment faire les modifications dans la formule du tableau pour qu'au delà de la ligne 34, les données soient incluses dans le récap ?

Je souhaiterai également étendre le tableau (+ de colonnes et + de lignes), mais je n'y parviens pas non plus.

Enfin, à quoi se réfère la commande "sansdoublontrié2" ?

Merci d'avance.
 

nightswan

XLDnaute Junior
Re : besoin equivalence formule SIERREUR Excel 2007-2003

Bonjour,

La formule de mapomme pour le calcul du nombre de fois qu'apparait un triplet (Aux dans son tableau) fonctionne bien sous Excel 2007, mais pose problème sous 2003 (au boulot).
=SIERREUR(1/NB.SI.ENS($D$3:$D$100;D3;$E$3:$E$100;E3;$F$3:$F$100;F3);"") (OK sous 2007),

=_xlfn.IFERROR(1/_xlfn.COUNTIFS($D$3:$D$100;D3;$E$3:$E$100;E3;$F$3:$F$100;F3);"") (une fois la conversion du fichier 2007 faite sous 2003 et après actualisation de données, la formule se modifie et ne fonctionne plus.

Avez-vous une équivalence "native" pour 2003 ?

Merci d'avance.
 

mikachu

XLDnaute Occasionnel
Re : besoin equivalence formule SIERREUR Excel 2007-2003

Bonjour,

essaye en remplaçant le =sierreur(... par un =si(esterreur(...

par contre, n'ayant pas XL2007, je ne peut pas vérifier l'équivalence au niveau de l'écriture de la formule)
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry