Pb avec formule matricielle

  • Initiateur de la discussion LeFennec
  • Date de début
L

LeFennec

Guest
Bonjour à toutes et à tous,

Je dois effectuer des moyennes de points pour un bulletin d'élève et pour cela, j'utilise une formule matricielle.

Globalement, ça fonctionne, mais il y a un cas dans lequel ça ne va pas.

Je n'arrive pas à comprendre le problème.

Voir fichier attaché.

Quelqu'un peut-il m'aider?

D'avance, merci.

Ah, encore un détail: je travaille avec Excel 97 (à la maison, sur PC, en français) et Excel 98 (au bureau, sur MAC, en anglais) [file name=Exemple-xls_20050315130414.zip size=15572]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Exemple-xls_20050315130414.zip[/file]
 

Pièces jointes

  • Exemple-xls_20050315130414.zip
    15.2 KB · Affichages: 24
L

LeFennec

Guest
Ben mince, j'ai cherché toute la soirée d'hier sans rien trouver et là, subitement, j'essaie un truc et ça fonctionne :p

Voici ce que j'ai trouvé:

{=IF(SUM(ISNUMBER(B10:M10)*1)=0;'---';ROUND(SUM(B10:M10)/SUM($B$6:$M$6*ISNUMBER(B10:M10))*100*2;0)/2)}

Désolé d'avoir dérangé pour rien :eek:
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Avec SommeProd (SumProduct) à la place de Somme() en matriciel, tu n'as pas besoin de valider par ctrl, maj et entrée :
=SI(SOMME(B10:M10)=0;'---';ARRONDI(SOMME(B10:M10)/SOMMEPROD($B$6:$M$6*ESTNUM(B10:M10))*100*2;0) /2)

En anglais, ça doit être à peu près ça :
=IF(SUM(B10:M10)=0;'---';ROUND(SUM(B10:M10)/SUMPRODUCT($B$6:$M$6*ISNUMBER(B10:M10))*100*2;) /2)
 
L

LeFennec

Guest
Merci beaucoup pour le tuyau.

Votre formule ne fonctionne cependant pas dans mon cas car dans le cas où l'élève obtient un zéro à toutes ses notes, votre formule renvoit '---' et elle devrait renvoyer zéro.

La formule que j'avais corrigé ne fonctionnait pas non plus dans un autre cas: si la première note (cellule B10, par exemple) était un 'A' (Absent), par exemple.

J'ai dû rajouter une condition supplémentaire, ce qui donne:
{=IF(SUM(ISNUMBER(B10:M10)*1)=0;IF(OR((B10:M10)='A';(B10:M10)='CM';(B10:M10)='E';(B10:M10)='P');'A';'---');ROUND(SUM(B10:M10)/SUM($B$6:$M$6*ISNUMBER(B10:M10))*100*2;0)/2)}

Cela fonctionnerait-il sans formule matricielle?

Faudra que j'essaie, pour voir ;)
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Fais des essais avec ces deux-là, pour la ligne 7 :

=SI(NBVAL(B7:M7)=0;'---';ARRONDI(SOMME(B7:M7)/SOMMEPROD($B$6:$M$6*ESTNUM(B7:M7))*200;0) /2)
=IF(COUNTA(B7:M7)=0,'---',ROUND(SUM(B7:M7)/SUMPRODUCT($B$6:$M$6*ISNUMBER(B7:M7))*200,0) /2)

Ou bien :
=SI(NB(B7:M7)>0;ARRONDI(SOMME(B7:M7)/SOMMEPROD($B$6:$M$6*ESTNUM(B7:M7))*200;0) /2;'---')
=IF(COUNT(B7:M7)>0,ROUND(SUM(B7:M7)/SUMPRODUCT($B$6:$M$6*ISNUMBER(B7:M7))*200,0) /2,'---')

(à valider par 'Entrée' simplement)

La 1ère : si tu n'as ni chiffre ni lettre, la formule renvoie 3 petits traits, sinon, le calcul se fait.
La 2ème : si tu as au moins un nombre, le calcul se fait, sinon tu obtiens les 3 traits.
 
L

LeFennec

Guest
Génial, ça fonctionne!

Euh ... ben non, il y a encore un cas où ça ne fonctionne pas:

si on n'a pas de points mais que des absences, par exemple (et donc on n'a pas de cellule avec des chiffres mais 1 ou plusieurs cellules avec une lettre), la formule renvoit un message d'erreur #DIV/0! dans la première formule et écrit '---' dans la 2ème au lieu de renvoyer 'A'.

Désolé, Monique, tu dois me trouver chiant.

J'essaie de régler le problème du 'A' dans une de tes 2 formules mais je n'ai pas encore trouvé ...
 
L

LeFennec

Guest
Bon, voilà, je crois que cette formule-ci fonctionne dans tous les cas de figure:

=IF(COUNT(B25:M25)>0;ROUND(SUM(B25:M25)/SUMPRODUCT($B$6:$M$6*ISNUMBER(B25:M25))*100*2;0)/2;IF(COUNTIF(B25:M25;'A')<>0;'A';'---'))

Merci encore, Monique, c'est toujours plus facile d'éviter les formules matricielles.
 

Statistiques des forums

Discussions
312 685
Messages
2 090 946
Membres
104 705
dernier inscrit
Mike72