Fonction sumproduct

bonjour
je suis débutant en programmation vba.

lorsque j'exécute la macro suivante:
Sub delaiprev()
Dim i As Integer
i = 4
While i <= 100
Cells(i, 17) = SumProduct(("U4:U90" >= ("b" & i)) - ("U4:U90" >= ("b" & i) + 75 + Int(75 / 5)))
i = i + 1
Wend
End Sub
sur une seule cellule la macro marche, mais lorsque j'utilise la boucle.
un message d'erreur apparait : erreur de compilation Sub ou Fonction non définie.

3 réponses

  1. Bonjour brahmi_najib,

    a) Il faut utiliser WorksheetFunction.

    b) J'ai simplifié la fin de la formule :
        75 + Int(75 / 5) = 75 + 15 = 90

    
    Option Explicit
    
    
    Sub delaiprev()
      Dim i As Integer: i = 4
      While i <= 100
        Cells(i, 17) = WorksheetFunction.SumProduct(("U4:U90" >= ("b" & i)) - ("U4:U90" >= ("b" & i) + 90))
        i = i + 1
      Wend
    End Sub
    
    

    Si ton problème est réglé, merci d'aller en haut de page
    pour cliquer sur « Marquer comme résolu ».

    Cordialement.  😊
    0
    1. Mr albkan

      Merci pour Votre réponse
      un nouveau message d'erreur:
      erreur d'exécution '13':Incompatibilité de type.

      voila quand j'utilise une seule cellule avec des guillemets ça fonctionne.
      Cells(4, 17) = "=sumProduct((U4:U90 >= b4) - (U4:U90 >= (b4 + 75) + Int(75 / 5)))"
      mais quand j'utilise la boucle les erreurs apparaissent.

      j'ai laissé la formule sans rectification car 75 va varier .
      NB. j'utilise excel 2013

      Merci bien pour votre aide.
      0
      1.  
        Bonjour brahmi_najib,

        En laissant tel que la fin de la formule, le code VBA serait celui-ci :

        
        Option Explicit
        
        
        Sub delaiprev()
          Dim i As Integer: i = 4
          While i <= 100
            Cells(i, 17) = WorksheetFunction.SumProduct(("U4:U90" >= ("B" & i)) - ("U4:U90" >= ("B" & i) + 75 + Int(75 / 5)))
            i = i + 1
          Wend
        End Sub
        
        

        MAIS :

        1) J'avais fait une réponse rapide, et c'en est toujours une, car j'ai juste constaté
            ceci : a) SumProduct seul n'est pas reconnu : « Erreur de compilation: Sub
            ou Function non définie ». b) Avec WorksheetFunction.SumProduct, l'erreur
            disparaît et ça compile bien. Je n'ai pas été plus loin, car je pensais que c'était
            réglé ; donc pour la suite de la ligne, je n'ai rien vérifié du tout.

        2) En allant maintenant plus loin : SumProduct est une fonction qui fait la somme
            des produits des arguments transmis ; il peut y avoir de 1 à 30 arguments qui
            sont des tableaux, et ces tableaux doivent être de même dimension. Pour plus
            de détails sur cette fonction, je te recommande de lire l'aide correspondante.

            Or ce que tu transmet en argument n'a pas du tout l'air de correspondre avec
            ce qui est prévu ! Comme il y a 2 tests " >= ", ça fait penser à une fonction
            comme SumIf (qui existe donc bien réellement), mais par contre, il n'y a pas
            de fonction SumProductIf ! Donc en fait, il faudrait que tu détermines quel
            travail tu veux faire exactement, et corriger en conséquence. Car en fait, c'est
            possible que pour le travail à faire, tu n'aies pas besoin de SumProduct du tout,
            ou indirectement, et qu'en tout cas, ce serait mieux de refaire tout autrement.

            Mais comme je ne sais pas exactement ni ce que tu veux faire réellement,
            ni quelles sont exactement tes données sur la feuille (en "U4:U90" et en "B" & i),
            je ne peux pas t'aider davantage. Comme je ne suis pas spécialement matheux,
            je préfère laisser à un autre intervenant le soin de te venir en aide.

        Cordialement.  😊
         
        0
    2. Contributeur
      Bonjour brahmi_najib,

      WorksheetFunction est une fonction Excel et non VBA

      Règle de base quand tu utilises VBA avec des formules Excel:
      en VBA les fonctions excel font partie de l'objet "application"

      donc la bonne syntaxe est
      Application.WorksheetFunction.SumProduct(........
      que l'on peut écrire
      Application.SumProduct(........
      en effet c'est un objet implicite de l'objet "application"


       Michel
      0