Function CompoSomme(ByVal SRéf As Double, ByVal TDon) As Variant
Dim N As Long, S As Double, LDon As Long, D As Double, _
MeilD As Double, MeilN As Long, TRés(), LRés As Long
If TypeOf TDon Is Range Then TDon = TDon.Value
MeilD = 2E+222
For N = 0 To 2 ^ UBound(TDon, 1) - 1
S = 0
For LDon = 1 To UBound(TDon, 1)
If N And 2 ^ (LDon - 1) Then S = S + TDon(LDon, 1)
Next LDon
D = Abs(S - SRéf): If D < MeilD Then MeilN = N: MeilD = D
Next N
ReDim TRés(1 To UBound(TDon, 1), 1 To 2)
For LDon = 1 To UBound(TDon)
If MeilN And 2 ^ (LDon - 1) Then LRés = LRés + 1: _
TRés(LRés, 1) = TDon(LDon, 1): TRés(LRés, 2) = LDon
Next LDon
CompoSomme = TRés
End Function