1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
Sub test()
Dim Tbl(1 To 10) As Double
Dim TblRetour() As Double
Dim I As Integer
Tbl(1) = 1
Tbl(2) = 10
Tbl(3) = 5
Tbl(4) = 25
Tbl(5) = 10
Tbl(6) = 1
Tbl(7) = 36
Tbl(8) = 5
Tbl(9) = 25
Tbl(10) = 10
TblRetour = Max(Tbl(), 2)
For I = 1 To UBound(TblRetour, 2)
Debug.Print "Valeur : " & TblRetour(1, I) & " Index : " & TblRetour(2, I)
Next I
End Sub
Function Max(Tablo() As Double, Nb As Integer) As Double()
Dim Tbl() As Double
Dim TblRetour() As Double
Dim Valeur As Double
Dim Index As Long
Dim I As Long
Dim J As Long
'crée un tableau à 2 dimensions pour stocker les index
ReDim Tbl(1 To 2, 1 To UBound(Tablo))
'tranfère les valeurs et mémorise les index
For I = 1 To UBound(Tablo)
Tbl(1, I) = Tablo(I)
Tbl(2, I) = I
Next I
'"<" pour les plus grandes valeur et ">" pour les plus petites valeurs
For I = 1 To UBound(Tbl, 2) - 1
For J = I + 1 To UBound(Tbl, 2)
If Tbl(1, I) < Tbl(1, J) Then
Valeur = Tbl(1, J)
Index = Tbl(2, J)
Tbl(1, J) = Tbl(1, I)
Tbl(2, J) = Tbl(2, I)
Tbl(1, I) = Valeur
Tbl(2, I) = Index
End If
Next J
Next I
J = 0
'récupère la valeur de référence
Valeur = Tbl(1, Nb)
'boucle pour toutes les trouver et les stocke dans un autre tableau intermédiaire
For I = 1 To UBound(Tbl, 2)
If Tbl(1, I) = Valeur Then
J = J + 1
ReDim Preserve TblRetour(1 To 2, 1 To J)
TblRetour(1, J) = Tbl(1, I)
TblRetour(2, J) = Tbl(2, I)
End If
Next I
Max = TblRetour
End Function |
Partager