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

13test.xlsm (201.92 Ko)

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)
9test-4.xlsm (197.34 Ko)

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

Rechercher des sujets similaires à "sommeprod vba"