Obtenir le rang en VBA

Salut le forum,

je tente d'obtenir le rang d'une valeur dans un code VBA sans passer par une cellule.

Private Sub BTN_tirage_Click()
Dim v1 As Integer, v2 As Integer, v3 As Integer, v4 As Integer, v5 As Integer, v6 As Integer
Dim valeurs(1 To 6) As Long

Randomize
valeurs(1) = Int(Rnd * 100000)
valeurs(2) = Int(Rnd * 100000)
valeurs(3) = Int(Rnd * 100000)
valeurs(4) = Int(Rnd * 100000)
valeurs(5) = Int(Rnd * 100000)
valeurs(6) = Int(Rnd * 100000)

v1 = Application.WorksheetFunction.Rank(valeurs(1), valeurs, 0)

LBL_tirage_j1.Caption = v1
LBL_tirage_j2.Caption = v2
LBL_tirage_j3.Caption = v3
LBL_tirage_j4.Caption = v4
LBL_tirage_j5.Caption = v5
LBL_tirage_j6.Caption = v6

End Sub

Dans la ligne v1 = Application.WorksheetFunction.Rank(valeurs(1), valeurs, 0), le terme valeurs me cause une erreur.

Merci pour votre aide.

Bonjour,

essaie ainsi, en utilisant la fonction Large (équivalent de GRANDE.VALEUR d'une feuille), plutôt que RANK (équivalent de RANG)

Sub essai()
Dim V1 As Long, I As Byte
Dim Valeurs(1 To 6)  As Long

For I = 1 To 6
    Randomize (Timer)
    Valeurs(I) = Int(Rnd * 100000)
Next I
For I = 1 To 6
    V1 = Application.Large(Valeurs, I)
    Me.Controls("LBL_tirage_j" & I).Caption = V1
Next I
End Sub

Même chose pour celui-ci Mytå.

Salut felix,

ton code me place les 6 valeurs de la plus grande à la plus petite alors que je cherche à obtenir pour v1, la position de la valeur "valeurs(1)".

Bonsoir,

essaie ainsi :

Sub essai2()
Dim V1 As Long, I As Byte, J As Byte
Dim Valeurs(1 To 6)  As Long

For I = 1 To 6
    Randomize (Timer)
    Valeurs(I) = Int(Rnd * 100000)
Next I
For I = 1 To 6
    V1 = Application.Large(Valeurs, I)
    For J = 1 To 6
        If V1 = Valeurs(J) Then Me.Controls("LBL_tirage_j" & J).Caption = I
        End If
    Next J
Next I
End Sub
Rechercher des sujets similaires à "obtenir rang vba"