Tirage sans remise

Fermé
xXfalcon68Xx Messages postés 12 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 19 juin 2014 - Modifié par xXfalcon68Xx le 19/06/2014 à 10:01
xXfalcon68Xx Messages postés 12 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 19 juin 2014 - 19 juin 2014 à 11:38
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 :

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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
19 juin 2014 à 09:34
Bonjour,

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


0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 19/06/2014 à 09:44
Salut pijaku,

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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 19/06/2014 à 09:48
Salut Eric,

Et bien, curieusement, lors de mes tests, il s'avère qu'il m'a trouvé des 9.

Regarde ce test :
Sub test()
Randomize Timer
x1 = CInt(9 * Rnd())
x2 = CInt(9 * Rnd())
Do While x2 = x1 Or x2 <> 9
  x1 = CInt(9 * Rnd())
  x2 = CInt(9 * Rnd())
Loop

MsgBox x1 & "  " & x2
End Sub


C'est bien parce qu'il n'y a pas grand chose à se mettre sous la dent... ;-)
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
19 juin 2014 à 10:30
Ah oui, je n'avais pas fait attention à ça.
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 :
Randomize
x1 = Int(9 * Rnd())
Do
    x2 = Int(9 * Rnd())
Loop Until x1 <> x2

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
19 juin 2014 à 10:44
Voilà la réponse...
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.
0
xXfalcon68Xx Messages postés 12 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 19 juin 2014
19 juin 2014 à 10:47
sa ne marche pas chez moi !
on met dit que do doit etre en fin d'instruction !
0
xXfalcon68Xx Messages postés 12 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 19 juin 2014
19 juin 2014 à 10:00
For i = 1 To x2 <> x10

je voulais dire en gros qu il falait tirer un nombre jusqua ce que x2 ne soit pas egale a x2
0
xXfalcon68Xx Messages postés 12 Date d'inscription mercredi 18 juin 2014 Statut Membre Dernière intervention 19 juin 2014
19 juin 2014 à 10:05
heu que x1 ne soit pas egale a x2
0