Sub Macro1()
Dim DicoBoite As Object, Boite As Range, DerLig As Integer, Lig As Integer, Elmnt As Variant
Dim Qte As Integer, QteB As Integer, QteC As Integer
Application.ScreenUpdating = False
[E2:E65000].ClearContents
Set DicoBoite = CreateObject("Scripting.Dictionary")
DerLig = [B65000].End(xlUp).Row
'on identifie la liste unique des boites
For Each Boite In Range([B2], [B65000].End(xlUp))
If Not DicoBoite.Exists(Boite.Value) Then DicoBoite.Add Boite.Value, Boite.Value
Next Boite
For Each Elmnt In DicoBoite.items
Lig = [E65536].End(xlUp).Row + 1
Qte = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
QteB = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
QteC = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
If Qte > 0 Then
Range("E" & Lig).Value = Elmnt
Range("F" & Lig).Value = Qte
Range("G" & Lig).Value = Columns(2).Find(Elmnt, LookIn:=xlValues, lookat:=xlWhole).Offset(0, -1).Value
Lig = Lig + 1
End If
If QteB > 0 Then
Range("E" & Lig).Value = Elmnt & "B"
Range("F" & Lig).Value = QteB
Lig = Lig + 1
End If
If QteC > 0 Then
Range("E" & Lig).Value = Elmnt & "C"
Range("F" & Lig).Value = QteC
Lig = Lig + 1
End If
' Range("E" & Lig).Value = Elmnt: Range("E" & Lig + 1).Value = Elmnt & "B": Range("E" & Lig + 2).Value = Elmnt & "C"
' Range("F" & Lig).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)<>""C"")*(RIGHT(C2:C" & DerLig & ",1)<>""B""))")
' Range("F" & Lig + 1).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""B""))")
' Range("F" & Lig + 2).Value = Evaluate("SUMPRODUCT((B2:B" & DerLig & "=" & Elmnt & ")*(RIGHT(C2:C" & DerLig & ",1)=""C""))")
Next
End Sub