Fonction sumproduct

brahmi_najib Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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.
A voir également:

3 réponses

Utilisateur anonyme
 
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
brahmi_najib
 
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
Utilisateur anonyme
 
 
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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