[VBA] Fonction matricielle excel

Résolu/Fermé
mat - 27 déc. 2010 à 13:38
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 - 27 déc. 2010 à 17:21
Bonjour,

J'ai une feuille avec :
-Une colonne désignant une semaine => colonne O
-Une colonne désignant une catégorie (A,B,C,D ou E) => colonne T

Je souhaite savoir le nombre de ligne où la semaine est inférieure à 4 (Janvier) et où la cellule de la colonne catégorie est remplie.

J'avais tenté avec ça
 
=SOMME(SI('[REPORTING.xls]TEST'!$T:$T<> "";STXT('[REPORTING.xls]TEST'!$O:$O;8;3)<4;))

mais visiblement cela ne fonctionne pas.

Merci !
A voir également:

4 réponses

Edit : NBVAL et non somme
=>
={NBVAL(SI('[REPORTING.xls]TEST'!$T:$T<> "";STXT('[REPORTING.xls]TEST!$O:$O;8;3)<4;))}
0
J'ai essayé avec cette formule aussi :
=SOMMEPROD((('[REPORTING.xls]TEST!$T:$T="SEMAINE 1")+('[REPORTING.xls]TEST!$T:$T="SEMAINE 2")+('[REPORTING.xls]TEST!$T:$T="SEMAINE 3")+('[REPORTING.xls]TEST!$T:$T="SEMAINE 11"))*('[REPORTING.xls]TEST!$O:$O<>""))

Mais cela ne fonctionne pas non plus...
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 283
Modifié par michel_m le 27/12/2010 à 14:42
Bonjour,

Les matricielles n'admettent pas les colonnes entières et en mettant par exemple T1:T65535 (XL<2007) ca risque d'^tre long: donc voir la hauteur maxi+extension possible dans le classeur source
On pourrait utilise SOMMEPROD
=SOMMEPROD((condition1)*(condition2)*1)

et si on tient à la matricielle
=SOMME(SI((condition1)*(condition2);1))


Au passage; pourquoi VBA dans le titre ?

Michel
Vous programmez en VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...(P. Fauconnier/dvp)
0
Pour le VBA dans le titre, je vais avouer que j'ai pas fait expres, c'est un réflexe, car je travail d'habitude avec VBA et non directement depuis excel.
Pourrais-tu m'éclairer sur le '*1' dans sommeprod, je ne comprends pas à quoi il sert.

J'ai essayé avec
  
=SOMMEPROD((('[REPORTING.xls]TEST!$T1:$T6000="SEMAINE 1")+('[REPORTING.xls]TEST!$T1:$T6000="SEMAINE 2")+('[REPORTING.xls]TEST!$T1:$T6000="SEMAINE 3")+('[REPORTING.xls]TEST!$T1:$T6000="SEMAINE 4"))*('[REPORTING.xls]TEST!$O1:$O6000<>"")*1) 

pour traiter sur les 6000 premières lignes, mais cela ne m'affiche rien alors que je devrais trouver 17. Qu'est ce qui pose problème ?
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 283
27 déc. 2010 à 15:03
comme tu es en booléen avec les "multiplier" et les "additionne", tu as "vrai" ou "faux" et pour compter tu multiplies par 1
6000 lignes avec 5 conditions.... j'aurais garder le test avec Stxt...mais qui ne correspond pas (8,3) avec semaine N
Cergy au lieu de test ?
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 283
Modifié par michel_m le 27/12/2010 à 15:14
explication sur stxt avant de partir

Stxt(.....;8;3) renvoie un TEXTE de 2 caractères
stxt"Semaine 4";8;3) te renvoie "4 " (quatre + espace)
0
Cergy est une erreur dans le copier coller que j'ai fait désolé, mais ça ne fonctionne toujours pas.
Quand au STXT, je veux bien l'utiliser mais il faut faire quelque chose de la forme [plage]=[quequechose] ? Dans ce cas là, comment je l'écris ?
De toute façon, même en écrivant en brut avec les 5 conditions, cela ne m'affiche rien, donc c'est qu'il ne trouve rien alors que manuellement je trouve 17...
0
michel_m Messages postés 16582 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 27 novembre 2022 3 283
27 déc. 2010 à 17:21
C'est toi qui a mis en résolu ?
0