SommeProd en VBA
Bonjour à tous,
Je voudrais faire l'addition d'une valeur en fonction de 3 critères:
Le tableau est énorme (+200000lignes) donc je souhaiterais une solution par VBA, pour diminuer le temps de latence de la macro.
Je dispose d'une base de donnée "BDD" et d'une feuille "Données" ou je voudrais que les résultats s'affichent.
Je dispose de 3 critères:
- 2 sont fixes et sont rentrées en "Dur" dans la feuille "Données"
- 1 et dynamique, c'est une liste qui peut avoir 2 comme 200 lignes, je voudrais que la macro scrute chaque lignes de la BDD afin de voir si les lignes concordent avec les critères et additionner toutes les valeurs des lignes ou les critères correspondent. Je cherche à rentrer cette valeur dans la cellule de droite de "Crit3".
Voici le code que j'ai commencé à faire, mais celui ne fonctionne pas, il y a un problème au niveau de la déclaration de som, je n'arrive pas a le faire incrémenter correctement
Je n'arrive pas à résoudre ce problème:
Sub family()
Sub family()
Dim sWkBDD As Worksheet
Dim sWkASS As Worksheet
Dim tabBDD()
Dim Som(19) As Long, iCol As Long
Dim crit1, crit2, crit3
'
Set sWkBDD = Worksheets("BDD")
Set sWkASS = Worksheets("Données")
'
With sWkBDD
iRow = Range("A" & Rows.Count).End(xlUp).Row
tabBDD = .Range("A3:AE" & iRow).Value
End With
With sWkASS
crit1 = .Cells(1, 6)
crit2 = .Cells(2, 6)
'
For iCol = 2 To .Cells(Rows.Count, 7).End(xlDown).Row
crit3 = .Cells(iCol,7 )
'
For y = 1 To UBound(tabBDD, 1)
Select Case tabBDD(y, 1) & tabBDD(y, 31)
Case Is = crit2 & crit1 & crit3
x = 1
End Select
Som(1 + (x * 1)) = Som(1 + (x * 1)) + tabBDD(y, 15) + tabBDD(y, 16) + tabBDD(y, 18) + tabBDD(y, 20)
Next
'
For x = 2 To .Cells(Rows.Count, 7).End(xlDown).Row
.Cells(x + 1, iCol) = Som(x)
End
Next
Next
End With
End Sub
End Sub
Est ce que vous pouvez m'aider?
Merci
Bonjour,
Sans VBA, à mettre en H2, validez et tirer vers le bas
=SOMMEPROD((BDD!$A$3:$A$500000=Données!$F$1)*(BDD!$W$3:$W$500000=Données!$F$2)*(BDD!$X$3:$X$500000=Données!G2)*BDD!$N$3:$V$500000)
Bonjour,
Case Is = crit2 & crit1 & crit3
x = 1
End Select
C'est normal que tu n'initialises pas x dans un Case Else ?
Là tu réutilises .Cells(Rows.Count, 7).End(xlDown).Row +1
eric