Option Explicit
Sub MoyJ()
'mettre les données en colonne 1, sans ligne de titre et sans données parasites sous cette colonne
' la sub écrira en colonne 2 & 3
Dim i%, a&, v%, Ta%(), n&, Tb#(), Tc#(), h%, j&, k&
h = Cells(Rows.Count, 1).End(xlUp).Row: v = 3
If h < v Then Exit Sub
ReDim Tc(1 To 2, v To h)
For i = v To h
a = WorksheetFunction.Combin(h, i): Erase Tb
For j = 1 To a
ReDim Preserve Tb(1 To 2, 1 To j): Ta = NCmb(h, i, j)
For k = 1 To UBound(Ta)
Tb(1, j) = Tb(1, j) + Cells(Ta(k), 1)
Next k
Tb(1, j) = Tb(1, j) / UBound(Ta)
For k = 1 To UBound(Ta)
Tb(2, j) = Tb(2, j) + (Tb(1, j) - Cells(Ta(k), 1)) ^ 2
Next k
Next j
n = j - 1
For j = 1 To n: For k = 1 To 2
Tc(k, i) = Tc(k, i) + Tb(k, j)
Next k, j
For k = 1 To 2
Tc(k, i) = Tc(k, i) / n
Next k
Tc(2, i) = Sqr(Tc(2, i))
For j = 1 To 2
Cells(i, j + 1) = Tc(j, i)
Next j
Next i
End Sub
Private Function NCmb(ByVal a%, ByVal b%, ByVal c&) As Integer()
Dim Tb%(), i&, bS As Boolean, x&, n&, Cb&
n = WorksheetFunction.Combin(a, b)
If n > 2147483647 Or b > a Or b < 1 Or c < 1 Or c > n Then
ReDim Tb(0 To 0)
Else
ReDim Tb(0 To b)
Do
Cb = Cb + 1: x = 0: bS = False
For i = a - 1 - Tb(Cb - 1) To b - Cb Step -1
x = x + WorksheetFunction.Combin(i, b - Cb)
If c <= x Then bS = True: Exit For
Next i
Tb(Cb) = a - i: c = c - (x - WorksheetFunction.Combin(i, b - Cb))
Loop Until Cb = b
End If
NCmb = Tb
End Function