Function GetSingleValue(ByRef aArr() As String, sResult As String) As Boolean
If UBound(aArr) = 0 Then
' reste rien
GetSingleValue = False
Else
GetSingleValue = True
' on récupère un index
Dim Index As Long
Index = Int((UBound(aArr) * Rnd) + (LBound(aArr) + 1))
' on récupère la valeur
sResult = aArr(Index)
' on écrase la position par la dernière valeur et on supprime la dernière position
aArr(Index) = aArr(UBound(aArr))
ReDim Preserve aArr(UBound(aArr) - 1)
End If
End Function
' EXEMPLE D'UTILISATION (nécessite un bouton et une textbox)
Option Explicit
Dim aMyArray() As String 'attention, la premier index (0 ici) ne sera pas utilisé
'
'
Private Sub Form_Load()
' applique le facteur "aléatoire"
Randomize Timer
' redimension et remplissage du tableau
Dim i As Long
ReDim aMyArray(0 To 10)
For i = LBound(aMyArray) + 1 To UBound(aMyArray)
aMyArray(i) = "chaîne [" & CStr(i) & "]"
Next i
' pour le test....
Text1.Width = 2895
Text1.Text = vbNullString
End Sub
'
'
Private Sub Command1_Click()
Dim sRet As String
If GetSingleValue(aMyArray, sRet) Then
Text1.Text = sRet
Else
Text1.Text = "Toutes les valeurs ont été piochées"
End If
End Sub