Sub ok_Click()
'Worksheets(3).Activate
Dim myrange As Range
Dim startX As Variant
''''declaration d'un tableau destiné a recevoir les resultats
ReDim tabres(1 To 2, 1 To 1)
With Worksheets("preventive")
Set myrange = Union(.Columns("N:N"), .Columns("S:S"), .Columns("X:X"), .Columns("AC:AC"), .Columns("AH:AH"), .Columns("AM:AM"))
'cherche la plus grand valeur dans myrange
plusgrand = Application.WorksheetFunction.Max(myrange)
'tant que le tableau de resultat n'atteint pas 16 valeurs
While UBound(tabres, 2) < 16
'''' recherche la valeur la plus petite
startX = Application.WorksheetFunction.Min(myrange)
'''recherche de la cellule contenant la plus petite valeur (voir aide sur Find)
Set c = myrange.Find(startX, LookIn:=xlValues, lookat:=xlWhole)
'''' mise en tableau resultat de la plus petite valeur et de son adresse
tabres(1, UBound(tabres, 2)) = startX
tabres(2, UBound(tabres, 2)) = c.Address
'''''
'Remplacement dans cette cellule par la plus grande valeur augmentée de 1
'pour que la recherche suivante s'opere sur la + petite valeur suivante
c.Value = plusgrand + 1
'augmentation de la taille du tableau resultat pour accueillir la prochaine valeur
ReDim Preserve tabres(1 To 2, 1 To UBound(tabres, 2) + 1)
Wend
End With
msg = "plus petites valeurs : "
'pour chaque valeur du tableau resultat
For n = 1 To UBound(tabres, 2) - 1
'restituer la valeur d'origine aux cellules contenant les plus petites valeurs
Sheets("preventive").Range(tabres(2, n)) = tabres(1, n)
'ecrire le message
msg = msg & tabres(1, n) & " ; "
Next
'affiche la liste des 15 plus petites valeurs
MsgBox (Left(msg, Len(msg) - 2))
End Sub