Option Explicit
Function MinSup_N(xZone As Range, SupA As Long)
' on traite le tableau par paquet de ParPaquetDe nombre de lignes
' pour éviter des PB de mémoire saturée
Const ParPaquetDe = 20000
Dim derlig As Long, tablo As Variant, i As Long, k As Long
Dim prem As Long, der As Long, aux As Long, largeur As Long
' (avec le range xZone en paramètre)
With xZone
' nombre de colonnes de xzone : nombre de lignes de xZone
largeur = .Columns.Count: derlig = .Rows.Count
' on traite le tableau par paquet de ParPaquetDe lignes
' pour éviter des PB de mémoire saturée
prem = 1
der = prem + ParPaquetDe
' si la dernière ligne à traiter est supérieure à
' la dernière ligne des données (derlig), alors la dernière
' ligne à traiter = derlig
If der > derlig Then der = derlig
Do
' transfert des lignes de données dans le table tablo
tablo = .Offset(prem - 1).Resize(der - prem + 1).Value
For i = LBound(tablo) To UBound(tablo)
' boucle sur chaque ligne du tablo
For k = 1 To largeur
' dès qu'un élément dela ligne est inf ou égal à 3
' on quitte la boucle
If tablo(i, k) <= SupA Then Exit For
Next k
' si l'indice k est égal à 11, alors on a parcouru toute la boucle
' sans trouver de valeur <= à SupA: Le min est donc > à SupA
' on incrémente le compteur
If k = largeur + 1 Then MinSup_N = MinSup_N + 1
Next i
' préparation de la boucle suivante
prem = der + 1: der = prem + ParPaquetDe
If der > derlig Then der = derlig
' si la première ligne suivante à traiter est sup. à derlig
' alors on sort de la boucle Do...Loop
Loop Until prem > derlig
End With
End Function