Option Explicit
Sub Répartition()
Feuil1.[E8].Resize(7).Value = RépArr(Feuil1.[B5].Value, Feuil1.[C8:C14])
End Sub
Function RépArr(ByVal MonTot As Double, Parts) As Variant()
Dim Te(), Ts(), L&, TotParts As Double
If TypeName(Parts) = "Range" Then Te = Parts.Value Else Te = Parts
ReDim Ts(1 To UBound(Te, 1), 1 To 1)
For L = UBound(Te) To 1 Step -1: TotParts = TotParts + Te(L, 1): Ts(L, 1) = TotParts: Next L
For L = 1 To UBound(Te): Ts(L, 1) = Int(MonTot * Te(L, 1) / Ts(L, 1) + 0.5)
MonTot = MonTot - Ts(L, 1): Next L
RépArr = Ts
End Function