Function FiltreTableau(tableau As Range, colCrit1, critere1, ColResult, Optional colcrit2, Optional critere2)
a = tableau
k = 1
Dim b(): ReDim b(1 To UBound(ColResult) - LBound(ColResult) + 1, LBound(a) To UBound(a))
If IsMissing(colcrit2) Then colcrit2 = colCrit1: critere2 = critere1
For i = LBound(a, 1) To UBound(a, 1)
If a(i, colCrit1) = critere1 And a(i, colcrit2) = critere2 Then
For c = LBound(ColResult) To UBound(ColResult)
col = ColResult(c, 1)
b(c, k) = a(i, col)
Next c
k = k + 1
End If
Next i
ReDim Preserve b(1 To UBound(ColResult) - LBound(ColResult) + 1, LBound(a) To Application.Caller.Rows.Count)
FiltreTableau = Application.Transpose(b)
End Function