Tirage sans remise
xXfalcon68Xx
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
xXfalcon68Xx Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
xXfalcon68Xx Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Je fait un programe qui tire au sort un nombre, qui suivant celui-ci ouvriront une fenètre différente. Jusque la ça marche.
Mais plus loin, je dois re-tirer un nombre. mais celui-ci doit etre différent du premier.
Coment faire ?
Mon programme :
x1 est le premier nombre.
et x2 le nombre qui devrait etre tirer.
Mais plus loin, je dois re-tirer un nombre. mais celui-ci doit etre différent du premier.
Coment faire ?
Mon programme :
Private Sub CommandButton1_Click() For i = 1 To x2 <> x1 x = Int(9 * Rnd) Select Case x2 Case 0: UserForm3.Show Case 1: UserForm4.Show Case 2: UserForm5.Show Case 3: UserForm6.Show Case 4: UserForm7.Show Case 5: UserForm8.Show Case 6: UserForm9.Show Case 7: UserForm10.Show Case 8: UserForme11.Show End Select If x2 = x1 Then End If Next End Sub
x1 est le premier nombre.
et x2 le nombre qui devrait etre tirer.
3 réponses
Bonjour,
Mais que veux tu faire exactement?
Que signifie :
Tu ne procèdes jamais au tirage de x1 et x2? juste x dans le code donné...
Sinon, pour simplement répondre à ta question :
Mais que veux tu faire exactement?
Que signifie :
For i = 1 To x2 <> x1?
Tu ne procèdes jamais au tirage de x1 et x2? juste x dans le code donné...
Sinon, pour simplement répondre à ta question :
Randomize Timer x1 = CInt(9 * Rnd()) x2 = CInt(9 * Rnd()) Do While x2 = x1 Or x2 = 9 Or x1 = 9 x1 = CInt(9 * Rnd()) x2 = CInt(9 * Rnd()) Loop MsgBox x1 & " " & x2
Pourquoi le Or x2 = 9 Or x1 = 9 ?
Rnd() est toujours < 1 non ? CInt(9 * Rnd()) ne peut être = 9
C'est bien parce qu'il n'y a pas grand chose à se mettre sous la dent... ;-)
eric
Et bien, curieusement, lors de mes tests, il s'avère qu'il m'a trouvé des 9.
Regarde ce test :
Oui, cette discussion arrive fort à propos. Je n'ai jamais réellement compris les résultats de ces tirages aléatoires et la nécessité de devoir y ajouter des tests pour obtenir les bons résultats, donc, parlons en.
Tu utilises CInt (conversion qui te fait un arrondi à l'entier le plus proche) au lieu de Int (partie entière).
En plus ça fausse la répartition. Le 0 se trouve sous-représenté de moitié du coup.
Au début j'avais pensé à des possibles erreurs d'arrondis suite à la multiplication. Mais j'avais lancé plusieurs boucles 1 to 100 000 000 sans jamais le constater.
Tant qu'on est dessus on peut raccourcir un peu :
eric
Je me suis fais un blocage (de quelques années déjà... pfff!) sur CInt au lieu de Int.
Bien vu et merci.
Et bien donc xXfalcon a sa réponse.
on met dit que do doit etre en fin d'instruction !