Sumproduct en VBA

Résolu
jeepipy Messages postés 88 Statut Membre -  
jeepipy Messages postés 88 Statut Membre -
Bonjour,

Je cherche juste à trouver l'quivalent de la fonction sommeprod mais en vba.
DOnc j'applique la fonction sumproduct mais j'ai du mal à l'utiliser.
Je voudrais faire la somme de ma colonne G pour les observations ayant le champ de la colonne F complété par un "o".

Je vous remercie pour vos retours et vous joins le code:

Sub total()

' Ajout de la ligne "Total"
Dim ShR As Worksheet
Set ShR = Sheets("Restitution")
Dim ShB As Worksheet
Set ShB = Sheets("base")
Dim vol As Range
Set vol = ShB.Range("G2:G10000")
Dim crit As Range
Set crit = ShB.Range("E2:E10000")

ShR.Range("D14") = Evaluate("=SumProduct((ShB.Range(F2:F100) = " & o & "), vol)")

End Sub

10 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    c'est peut être un pb de guillemet (en ASCII > chr(34)) qu'il faut arriver à caser
    les trois instructions suivantes donnent la somme des cellules de la plage B1:B5 lorsque il y a un "o" sur la même ligne dans la plage A1:A5
    1. donne =SOMMEPROD(($A$1:$A$5="o")*$B$1:$B$5) en B7
    Range("B7").FormulaLocal = "=SOMMEPROD(($A$1:$A$5=" & Chr(34) & "o" & Chr(34) & ")*$B$1:$B$5)"
    2. donne le résultat du sommeprod en B8
    Range("B8").Value = Evaluate("=sumproduct(($A$1:$A$5=" & Chr(34) & "o" & Chr(34) & ")*$B$1:$B$5)"))
    3. idem sans chr(34)
    Range("B9").Value = Evaluate("=sumproduct(($A$1:$A$5=" & """o""" & ")*$B$1:$B$5)")
    bonne suite
    1
  2. Morgothal Messages postés 1350 Statut Membre 184
     
    Bonjour,
    Je ne suis pas sûr de comprendre, tu voudrais sommer toutes les lignes de ta colonne G, là où dans la colonne F il y a "o" ?
    0
  3. jeepipy Messages postés 88 Statut Membre 155
     
    tout à fait
    0
  4. Morgothal Messages postés 1350 Statut Membre 184
     
    Pourquoi alors ne pas utiliser SUMIF plutôt que SUMPRODUCT?
    C'est peut être une fonction plus aisée à manipuler
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeepipy Messages postés 88 Statut Membre 155
     
    en effet cela semble plus facile mais je voudrais faire une somme selon plusuieurs critères c'est pourquoi je voulais utiliser sumproduct
    0
  7. jeepipy Messages postés 88 Statut Membre 155
     
    Bonjour Ccm81,
    je te remercie pour cette réponse bien détaillée mais j ai essayé de l adapter pour mon programme mais cela ne marche pas. Problème de parenthèse apparemment. Cela fonctionne bien sur 2 feuilles différentes?

    ma ligne de code:
    Sheets("Restitution").Range("D14").Value = Evaluate("=sumproduct((Sheets("base").Range($F$1:$F$5)=" & """o""" & ")*(Sheets("base").Range($G$1:$G$5))")

    Merci en tout cas
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    re

    une solution: tu nommes les plages, ce qui t'affranchit des noms de feuille dans les instructions
    une autre idée, utiliser FormulaLocal qui te permet de faire la même chose en Excel francisé

     Dim plage1 As Range, plage2 As Range
     Set plage1 = Sheets("base").Range("$A$1:$A$5")
     Set plage2 = Sheets("base").Range("$B$1:$B$5")
     Sheets("Restitution").Range("D14").Value = Evaluate("=sumproduct((plage1=" & """o""" & ")*plage2)")
     Sheets("Restitution").Range("D15").FormulaLocal = "=SOMMEPROD((plage1=" & """o""" & ")*plage2)"

    bonne suite
    0
  9. jeepipy Messages postés 88 Statut Membre 155
     
    Re,

    vraiment merci pour ta patience mais...il y a toujours un mais. :) ...même si je n'ai plus de message d'erreur les cellules D14 et D15 se remplissent avec un très joli:
    NOM?

    A quoi est-ce du?
    Aussi pourquoi faut il autant de guillements autour du" o" .

    Merci
    0
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    re
    es tu sûr d'avoir nommé les plages dans ta feuille (insertion/nom/définir)
    un essai avec 6 possibilités
    pour les guillemets quand on en veut 1 (autour de la valeur o) il faut le mettre entre ... guillemets ou utiliser chr(34)

    https://www.cjoint.com/?0HurTvK9y9P

    bonne suite
    0
  11. jeepipy Messages postés 88 Statut Membre 155
     
    Merci beaucoup ccm81.
    La 2ème solution fonctionne bien j'avais défini les noms de colonnes d'où une anomalie. Par contre la 1ere avec evaluate me met toujours #VALEUR...mais ce n'est pas grave. :)

    Bonne soirée.
    0