Générer un nombre aléatoire sans remise
Bonjour,
Dans le cadre d'un projet académique, je souhaiterais tirer des questions aléatoirement provenant d'un fichier excel. Pour cela, il me faut créer un nombre aléatoire (entre 1 et 54) sauf celui tirer au tirage précédent et ainsi de suite.
Voici mon code:
Private Sub CommandButton1_Click()
Dim Ligne As Integer
Dim Points As Intgeger
Dim i As Integer
If CommandButton1.Caption = "COMMENCER LA DRAFT" Then
CommandButton1.Caption = "VALIDEZ"
Ligne = Int(54 * Rnd) + 2
Points = 0
i = 0
Call Questions_Reponses
Frame1.Visible = True
Else
Points = Points + Correction
Ligne = Int(54 * Rnd) + 2
i = i + 1
Call Questions_Reponses
If i = 5 Then
MsgBox ("Vous avez obtenu " & Points & " points")
Call Config_Initiale_Controles
Exit Sub
End If
Call Questions_Reponses
End If
End SubPour la 15e ligne de code, je voudrais donc ajouter que ce tirage aléatoire ne doit pas comprendre le nombre tirer précédemment.
Auriez vous une idée de résolution ?
Merci d'avance
Cordialement
bonjour,
une proposition non testée
Dim tirage(0 To 54)
Dim i As Integer
Private Sub CommandButton1_Click()
Dim Ligne As Integer
Dim Points As Intgeger
If tirage(54) = 0 Then
For ITab = 1 To 54
tirage(ITab) = ITab
Next ITab
tirage(0) = 54
End If
q = aleatoire(1, tirage(0))
Ligne = tirage(q) + 2
tirage(q) = tirage(tirage(0))
tirage(0) = tirage(0) - 1
If CommandButton1.Caption = "COMMENCER LA DRAFT" Then
CommandButton1.Caption = "VALIDEZ"
Points = 0
i = 0
Call Questions_Reponses
Frame1.Visible = True
Else
Points = Points + Correction
i = i + 1
Call Questions_Reponses
If i = 5 Then
MsgBox ("Vous avez obtenu " & Points & " points")
Call Config_Initiale_Controles
Exit Sub
End If
Call Questions_Reponses
End If
End Sub
Function aleatoire(borne_inférieure, borne_supérieure)
aleatoire = Int(Rnd() * (borne_supérieure - borne_inférieure + 1)) + borne_inférieure
End FunctionMerci Beaucoup, ce code fonctionne de mon coté. En revanche, étant donné que j'ai affecté à mes cellules un nombre de points en fonction de la couleur, ce code a semblé décaler mes affectations.
Voici le bout de code:
Function Correction() As Integer 'Nombres de points en fonction des réponses
Correction = 0
With Sheets("Feuil1")
If OptionButton1.Value = True And .Range("B" & Ligne).Interior.ColorIndex = 6 Then 'ColorIndex 6 = Jaune
Correction = 2
ElseIf OptionButton1.Value = True And .Range("B" & Ligne).Interior.ColorIndex = 3 Then 'ColorIndex 3 = Rouge
Correction = -1
ElseIf OptionButton2.Value = True And .Range("C" & Ligne).Interior.ColorIndex = 6 Then
Correction = 2
ElseIf OptionButton2.Value = True And .Range("C" & Ligne).Interior.ColorIndex = 3 Then
Correction = -1
ElseIf OptionButton3.Value = True And .Range("D" & Ligne).Interior.ColorIndex = 6 Then
Correction = 2
ElseIf OptionButton3.Value = True And .Range("D" & Ligne).Interior.ColorIndex = 3 Then
Correction = -1
ElseIf OptionButton4 = True And .Range("E" & Ligne).Interior.ColorIndex = 5 Then 'ColorIndex 5 = Bleu
Correction = 0
End If
End With
End FunctionLorsque j'exécute ce code, on ne me renvoie le résultat théorique. Avez vous une idée ?
Bonsoir,
Avez vous une idée ?
non, pas sans un fichier exemple représentatif ni sans avoir une vue complète sur le code. par exemple, où et comment est géré la valeur de la variable Ligne ? Sur base du code qui tu as mis, ta variable ligne est vide et ce code tel quel ne peut pas fonctionner. (erreur 1004), si je fais le lien avec la correction précédente, ligne reçoit bien une valeur mais elle est locale à la procédure CommandButton1_Click et son contenu n'est pas utilisable dans la procédure correction.