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

Résolu
VBACripteur Messages postés 4 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. VBACripteur Messages postés 4 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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