Function MoySaufMaxMIN(rgTableau As Range, rgColonne As Range)
Dim T(), Lignes(), Maxi(), Mini(), i, j, k, N, S As Double
T = rgTableau.Value
ReDim Lignes(LBound(T) To UBound(T))
ReDim Maxi(LBound(T, 2) To UBound(T, 2))
ReDim Mini(LBound(T, 2) To UBound(T, 2))
'calcul des mini et maxi de chaque colonne
For i = LBound(T, 2) To UBound(T, 2)
Mini(i) = T(LBound(T), i)
Maxi(i) = T(LBound(T), i)
For j = LBound(T) + 1 To UBound(T)
If T(j, i) < Mini(i) Then Mini(i) = T(j, i)
If T(j, i) > Maxi(i) Then Maxi(i) = T(j, i)
Next j
Next i
'repérage des lignes à omettre
For i = LBound(T, 2) To UBound(T, 2)
For j = LBound(T) To UBound(T)
If T(j, i) = Mini(i) Or T(j, i) = Maxi(i) Then Lignes(j) = True
Next j
Next i
'somme des valeurs et nombre de valeurs
k = rgColonne.Column - rgTableau.Column + 1
For j = LBound(T) To UBound(T)
If Not Lignes(j) Then
S = S + T(j, k)
N = N + 1
End If
Next j
'calcul moyenne
If N = 0 Then MoySaufMaxMIN = "" Else MoySaufMaxMIN = S / N
End Function