Private Sub Worksheet_Activate()
Dim T1, ncol%, T2, resu(), i&, n&, j%, prix
With Sheets("Recettes").[A1].CurrentRegion
.Sort .Columns(2), xlAscending, .Columns(1), , xlDescending, Header:=xlYes 'tri sur 2 colonnes
T1 = .Value 'matrice, plus rapide
ncol = .Columns.Count
End With
With Sheets("Prix").[A1].CurrentRegion.Resize(, 3)
.Sort .Columns(2), xlAscending, .Columns(1), , xlDescending, Header:=xlYes 'tri sur 2 colonnes
T2 = .Columns(2).Resize(, 2) 'matrice, plus rapide
End With
ReDim resu(1 To UBound(T1), 1 To 2)
For i = 2 To UBound(T1)
If T1(i, 2) <> T1(i - 1, 2) Then
n = n + 1
resu(n, 1) = T1(i, 2)
For j = 3 To ncol
prix = Application.VLookup(T1(1, j), T2, 2, 0)
If IsNumeric(T1(i, j)) And IsNumeric(prix) Then resu(n, 2) = resu(n, 2) + T1(i, j) * prix
Next j
End If
Next i
'---restitution---
With [A2] '1ère cellule de destination
If n Then .Resize(n, 2) = resu: .Resize(n, 2).Borders.Weight = xlThin 'avec bordures
.Offset(n).Resize(Rows.Count - n - .Row + 1, 2).Delete xlUp 'RAZ en dessous
End With
End Sub