Pb avec randomize

cs_Titrax Messages postés 41 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 27 septembre 2002 - 18 avril 2002 à 17:12
cs_Titrax Messages postés 41 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 27 septembre 2002 - 19 avril 2002 à 01:17
j ai besoin d'assimiler des valeurs aléatoires à des valeurs fixes mais SANS répétition.
Voila mon prog mais ca plante (trop long)

Randomize
' Renvoie valeur aléatoire
Do
LesCartes = Int(31 * Rnd)
If PriseCarte(LesCartes) = False Then
CarteNormale(a)=CarteNormaleAssimile(LesCartes)
PriseCarte(LesCartes) = True
a = a + 1
End If
Loop Until a = 32

Donc il boucle dès que le nombre est pris. donc existe t il une fonction qui prenne qu'une seule fois un nombre entre deux valeurs ????

2 réponses

TFlorian Messages postés 194 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 19 décembre 2005 3
18 avril 2002 à 22:43
Bonjour,

Je ne sais pas si ce son ttest problemmes mais voici ce que j'ais constate:

- le prog apparait comme non repondant pour windows :

c'est que tu est bloque dans une boucle ! le systeme essay de la resoudre avant de redonner la main a windows :

solution :
rajoute l'instuction DoEvents dans le programme,
elle donne la main momentanement a windows pour qu'il ne prenne pas le prog comme plante ;-)
(cas de calcules long ou boucles imbriqees)

Randomize
' Renvoie valeur aléatoire
Do
LesCartes = Int(31 * Rnd)

DoEvents

If PriseCarte(LesCartes) = False Then
CarteNormale(a) = CarteNormaleAssimile(LesCartes)
PriseCarte(LesCartes) = True
a = a + 1
End If
Loop Until a = 32

-il semblerais que tu ne sorte jamais de ta condition, appres analyse, il semble normale que avec 31 cartes tu ne puisse en tiree 32 ;-)

voici l'ensemble du code que j'ai tester :

Dim PriseCarte(32)
Dim CarteNormaleAssimile(32)
Dim CarteNormale(32)

Randomize
' Renvoie valeur aléatoire
Do
LesCartes = Int(31 * Rnd)
DoEvents
If PriseCarte(LesCartes) = False Then
CarteNormale(a) = CarteNormaleAssimile(LesCartes)
PriseCarte(LesCartes) = True
a = a + 1
Debug.Print a, LesCartes
msg = msg & "Tirage N°" & a & ", carte " & LesCartes & vbCrLf
End If
Loop Until a = 31
MsgBox msg, , "TFlorian ;-)"
End Sub

TFlorian
0
cs_Titrax Messages postés 41 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 27 septembre 2002
19 avril 2002 à 01:17
Merci TFlorian, c'est axactement ce que je voulais...je te remercie car c'est pour un jeu de belote en réseau car on s'emmerde un peu en cours alors merci.......
0
Rejoignez-nous