C'est en voyant ce post, que j'ai eu envie d'approndir la question:
http://codes-sources.commentcamarche.net/forum/affich-10066446-une-serie-de-nombre-aleatoire
Voici 5 manières de faire un tirage aléatoire:
Tableau simple
Tableau dynamique
Collection
Collection dynamique
Avec une listbox dynamique a laquelle j'ai ajouté un tirage du loto avec 5 numeros plus numéro complémentaire pour le fun:
Ajout d'une TextBox1 multiline
<code>'Avec tableau simple
Sub Tirage_aléatoire()
Dim montableau() As String ' Tableau contenant les 9 numeros
Dim nombre As Long ' Nombre de numeros
Dim n As Long, i As Long ' Variables de travail
TextBox1.Text = ""
nombre = 9
ReDim montableau(CInt(nombre))
montableau(0) = "1"
montableau(1) = "2"
montableau(2) = "3"
montableau(3) = "4"
montableau(4) = "5"
montableau(5) = "6"
montableau(6) = "7"
montableau(7) = "8"
montableau(8) = "9"
Randomize() ' Initialise le générateur de nombres aléatoires
For n = 0 To nombre - 1
i = CLng(Int((nombre - n) * Rnd()))
TextBox1.AppendText(montableau(CInt(i)) & " ")
montableau(CInt(i)) = montableau(CInt(nombre - 1 - n))
Next
End Sub
'Avec Tableau dynamique
Sub Tiragealéatoire_tableaudynamique(ByVal x As Integer)
' Déclare un tableau dynamique.
Dim Montableau() As Integer
Dim n As Long, i As Long ' Variables de travail
TextBox1.Text = ""
ReDim Montableau(x) ' Alloue x éléments.
For j = 0 To x ' Effectue la boucle x fois.
Montableau(j) = j + 1 ' Initialise le tableau.
Next j
Randomize() ' Initialise le générateur de nombres aléatoires
For n = 0 To x - 1
i = CLng(Int((x - n) * Rnd()))
TextBox1.AppendText(Montableau(CInt(i)) & " ")
Montableau(CInt(i)) = Montableau(CInt(x - 1 - n))
Next
End Sub
Pour lancer
Tiragealéatoire_tableaudynamique(9)
Avec une Collection
Dim nombre_aleat As Integer
Dim numbers As New List(Of Integer) From
{1, 2, 3, 4, 5, 6, 7, 8, 9}
TextBox1.Text = " "
'On déclare une variable Classe Random()
Dim random As New Random()
For index As Integer = 0 To numbers.Count - 1
'.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
nombre_aleat = random.Next(numbers.Count)
'On mémorise l'item d'index (nombre aléatoire)
TextBox1.AppendText(numbers(nombre_aleat) & " ") 'ajoute le nombre aléatoire dans la TextBox
numbers.RemoveAt(nombre_aleat) 'supprime Le nombre aléatoire de la liste
Next
'Avec collection dynamique
Sub Tiragealéatoire_collectiondynamique(ByVal x As Integer)
Dim nombre_aleat As Integer
Dim lst As New List(Of String)
TextBox1.Text = ""
lst.Clear()
For i = 1 To x
lst.Add(i & " ")
Next
'On déclare une variable Classe Random()
Dim random As New Random()
'On fait autant de tirages que de lignes
For index = 0 To lst.Count - 1
'.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
nombre_aleat = random.Next(lst.Count)
'On mémorise l'item d'index (nombre aléatoire)
TextBox1.AppendText(CStr(lst(nombre_aleat))) 'ajoute le nombre aléatoire dans la TextBox
lst.RemoveAt(nombre_aleat) 'supprime Le nombre aléatoire de la liste
Next
End Sub
Pour lancer
Tiragealéatoire_collectiondynamique(9)
Avec listbox dynamique:
Dim list As New System.Windows.Forms.ListBox()
Dim index, i, nombre_aleat As Integer
Dim rep As String
Dim r As Integer
Do
rep = InputBox("Tapez un chiffre entre 9 et 50", " Tirage aléatoire", "49")
If rep = "" Or IsNumeric(rep) = False Then Exit Do
r = CType(rep, Integer)
Loop Until r > 8 And r < 51
TextBox1.Text = ""
Me.Controls.Add(list) 'cree listBox
list.Top = 10
list.Left = 10
'on rempli la listBox
For i = 1 To r
list.Items.Add(i & " ")
Next
'On déclare une variable Classe Random()
Dim random As New Random()
'On fait autant de tirages que de lignes
For index = 0 To list.Items.Count - 1
'.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
nombre_aleat = random.Next(list.Items.Count)
'On mémorise l'item d'index (nombre aléatoire)
TextBox1.AppendText(CStr(list.Items(nombre_aleat))) 'ajoute le nombre aléatoire dans la TextBox
list.Items.RemoveAt(nombre_aleat) 'supprime Le nombre aléatoire de la listBox
If r = 49 Then 'tirage loto
'.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
TextBox2.Text = CStr(random.Next(1, 10)) 'numero complémentaire ajouter textBox2
If index = 4 Then Exit For
End If
Next
For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is ListBox Then
Me.Controls.Remove(ctrl) 'supprime la listbox
End If
Next
Bonne programmation
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.