Bonjour,
une autre approche qui est 30 à 50 fois plus rapide sur tes 372 lignes, et dont le temps (en plus) ne devrait pas être exponentiel au nombre de lignes mais juste proportionnel :
Sub sommeprod2()
'-------------------------------DECLARATION DES VARIABLES---------------------------------------------------------
Dim i As Long
Dim limit As Long, nblig As Long
Dim qte, famille, result() As Long, cle As Long, dict
Set dict = CreateObject("Scripting.Dictionary")
Dim t As Single
t = Timer
'--------------------------------------INITIALISATION DES VARIABLES----------------------------------------------
Application.ScreenUpdating = False
' Application.Calculation = xlCalculationManual
Sheets("bdd").Select
limit = Columns.Find("limit", , xlValues, xlWhole).Column
nblig = Cells(Rows.Count, "C").End(xlUp).Row - 2
qte = [C3].Resize(nblig, 2)
famille = [G3].Resize(nblig, 2)
ReDim result(1 To nblig)
For i = 1 To UBound(qte)
cle = famille(i, 1) * 1000 + qte(i, 1)
dict(cle) = dict(cle) + qte(i, 2)
result(i) = dict(cle)
Next i
[M3].Resize(nblig) = Application.Transpose(result)
Debug.Print Timer - t & " s."
End Sub
Je met le résultat en M que tu puisses comparer les résultats.
Limité à 65536 lignes, sinon il faudra prévoir un découpage de la restitution par blocs.
Par curiosité tu donneras les temps comparés sur 50000 lignes ?
eric