Fonction sumproduct

brahmi_najib Messages postés 1 Statut Membre -  
michel_m Messages postés 18903 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.

3 réponses

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