Sumproduct en VBA

Résolu
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -
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

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
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
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   155
 
tout à fait
0
Morgothal Messages postés 1236 Date d'inscription   Statut Membre Dernière intervention   183
 
Pourquoi alors ne pas utiliser SUMIF plutôt que SUMPRODUCT?
C'est peut être une fonction plus aisée à manipuler
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   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
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
jeepipy Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   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