Pb transposition =SOMMEPROD(1/NB.SI(A1:A38;A1:A38)) en VBA

Résolu/Fermé
VBACripteur Messages postés 4 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 14 mai 2013 - 14 mai 2013 à 10:12
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 14 mai 2013 à 14:55
Bonjour,

J'essai de transposer en VBA la formule ci-dessous:
=SOMMEPROD(1/NB.SI(A1:A38;A1:A38))
Dans une cellule, cette formule me retourne bien le nombre que je cherche.

J'ai donc essayé le code suivant en VBA:

Dim vEval as variant
Dim sRange1 as string

vEval = WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(A1:A38,A1:A38))
=> erreur de compilation erreur de syntaxe

vEval = WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(A1:A38;A1:A38))
=> erreur de compilation Attendu : séparateurde liste ou )

sRange1 = "A1:A38"
vEval = WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(Worksheets("Sheet1").Range(sRange1), Worksheets("Sheet1").Range(sRange1)))
=> pas d'erreur de compilation mais quand je l'execute, erreur d'execution'13': Incompatibilité de type

Quelqu'un aurait-il une idée ?


2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 14/05/2013 à 12:33
Bonjour

sommeprod n'est pas la bonne fonction mais ca marche quand m^me

2 manières pour utiliser des matricielles en VBA
evaluate est à utiliser si on utilise des variables

Sub xxxx() 
MsgBox Evaluate("sum(1/countif(A1:A38,A1:A38))") 
MsgBox [sum(1/countif(A1:A38,A1:A38))] 
End Sub


Michel
0
VBACripteur Messages postés 4 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 14 mai 2013
14 mai 2013 à 13:56
Bonjour michel_m

Effectivement avec Evaluate("sum(1/countif(A1:A38,A1:A38))") j'ai bien le bon résultat mais en déclarant vEval comme int car le Evaluate me donne 5.999999999 alors que ce que je recherche c'est bien 6
En déclarant un int, le résultat est bien arrondi à 6.

Par contre, étant de nature curieuse,... peux-tu me dire pourquoi SOMMEPROD n'est pas la bonne fonction mais qui fonctionne quand même (mais pas dans mon exemple) ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 mai 2013 à 14:55
Le but d'un sommeprod est de multiplier les conditions réussies -une condition réussie renvoie Vrai soit 1- et faire la somme de la colonne des valeurs des lignes réussies
ce qui pas le cas dans la formule de dénombrement car on fait "simplement" la somme inverse des nb.si: il n'y a donc pas de "prod" et somme suffit

marque résolu merci et bon après-midi
0