Sumproduct en VBA

Résolu/Fermé
jeepipy Messages postés 70 Date d'inscription samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 - 17 août 2011 à 15:27
jeepipy Messages postés 70 Date d'inscription samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 - 20 août 2011 à 19:04
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 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
Modifié par ccm81 le 19/08/2011 à 14:52
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 jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
17 août 2011 à 15:35
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 samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 155
17 août 2011 à 16:51
tout à fait
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
17 août 2011 à 17:10
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 samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 155
18 août 2011 à 08:43
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 samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 155
20 août 2011 à 09:47
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 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
20 août 2011 à 11:31
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 samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 155
20 août 2011 à 14:33
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 10893 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 29 septembre 2024 2 421
Modifié par ccm81 le 20/08/2011 à 17:52
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 samedi 9 janvier 2010 Statut Membre Dernière intervention 9 août 2023 155
20 août 2011 à 19:04
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