Pb transposition =SOMMEPROD(1/NB.SI(A1:A38;A1:A38)) en VBA [Résolu/Fermé]

Messages postés
4
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
14 mai 2013
- - Dernière réponse : michel_m
Messages postés
15983
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 novembre 2019
- 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 ?


Afficher la suite 

2 réponses

Messages postés
15983
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 novembre 2019
2826
0
Merci
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
Messages postés
4
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
14 mai 2013
0
Merci
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) ?
michel_m
Messages postés
15983
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 novembre 2019
2826 -
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