Kotov
XLDnaute Impliqué
Bonsoir à tous,
Je prépare actuellement une macro qui sort plus de 500 données issues d'une base et je coince bêtement sur WorksheetFunction.SumProduct.
J'utilise régulièrement sans problème SOMMEPROD en formules avec de multiples conditions mais je bloque sur la même fonction en VBA.
Vous trouverez ci-après une macro expurgée posant le problème sachant que
- Plage contient les valeurs "Oui" ; "Non" et ""
- Plage1 contient des données numériques négatives (ex : -1234,56)
et que bien évidemment je cherche à connaître le montant global des valeurs numériques se référant à la plage contenant les valeurs "Oui"
Pour ce soir j'ai le cerveau en surchauffe, alors peut être que quelqu'un verra au premier coup d'oeil sur quoi je bute depuis une heure.
Bonne soirée
Kotov
EDIT : bien sûr, je peux obtenir le résultat avec une boucle qui additionne les montants quand la valeur est "Oui", mais j'aimerais l'obtenir avec WorksheetFunction.SumProduct
Je prépare actuellement une macro qui sort plus de 500 données issues d'une base et je coince bêtement sur WorksheetFunction.SumProduct.
J'utilise régulièrement sans problème SOMMEPROD en formules avec de multiples conditions mais je bloque sur la même fonction en VBA.
Vous trouverez ci-après une macro expurgée posant le problème sachant que
- Plage contient les valeurs "Oui" ; "Non" et ""
- Plage1 contient des données numériques négatives (ex : -1234,56)
et que bien évidemment je cherche à connaître le montant global des valeurs numériques se référant à la plage contenant les valeurs "Oui"
Code:
Sub StatsGlob()
Dim r&
Dim ShR As Worksheet
Set ShR = ActiveWorkbook.Sheets("R")
Dim ShS As Worksheet
Set ShS = ActiveWorkbook.Sheets("STATS")
Dim Plage As Range
Dim Plage1 As Range
ShR.Activate
'***************** Calculs avec SUMPRODUCT ************************
With ShR
r = ShR.Cells(65536, 1).End(3).Row
Set Plage = ShR.Range(Cells(2, 69), Cells(r, 69))
Set Plage1 = ShR.Range(Cells(2, 68), Cells(r, 68))
[color=blue] '3 tentatives sans succès : [/color]
[B]ShS.Cells(9, 8) = Application.WorksheetFunction.SumProduct(Plage.Value = "Oui" * 1, Plage1.Value)[/B] 'j'obtiens "erreur 13"
[B]ShS.Cells(10, 8) = Application.WorksheetFunction.SumProduct(Plage, Plage1)[/b] 'Résultat=0, si je fais SumProduct(Plage,1, Plage1) j'obtiens "erreur 13"
[B]ShS.Cells(11, 8) = Application.WorksheetFunction.SumProduct(Plage.Value = "Oui" ,1, Plage1.Value)[/B] 'j'obtiens "erreur 13"
'******* .... Autres calculs (sans intérêt pour le problème posé) ****************
End With
'***************** Libération de mémoire ************************
Set ShR = Nothing
Set ShR = Nothing
Set Plage = Nothing
Set Plage1 = Nothing
End Sub
Pour ce soir j'ai le cerveau en surchauffe, alors peut être que quelqu'un verra au premier coup d'oeil sur quoi je bute depuis une heure.
Bonne soirée
Kotov
EDIT : bien sûr, je peux obtenir le résultat avec une boucle qui additionne les montants quand la valeur est "Oui", mais j'aimerais l'obtenir avec WorksheetFunction.SumProduct
Dernière édition: