melleweb
Messages postés9Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention28 juin 2007
-
28 juil. 2006 à 12:37
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
28 juil. 2006 à 23:35
salut,pour remplir une msflexgrid d'une façon aléatoire ,apartir d'un Recordset j'ai utiliser la foction:
Randomize
a = Int((n * Rnd))
RsCal.Move (a)
et ça marche, mé le probleme c'est que parfois elle retourne des enregistrements en double parceque "a" prend la meme valeur aletaoire.
ma question c'est comment puisse je faire pour que le valeur de "a" ne se repete pas.
merci d'avance.
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 28 juil. 2006 à 12:58
Bonjour,
Désolé de cette réponse si c'est la même question que le précédent topic.
La question est formulée différemment.
jean-marc
'Premièrement, le Randomize doit être écrit une seule fois, donc à l'extérieur de la boucle ou encore au Form_Load. C'est un 'appel pour démarrer le "générateur" de nombres aléatoires.
'Pour l'erreur, j'imagine que le numéro généré par Rnd() détermine un Index qui est inexistant dans ta table. Si tu as 10 'enregistrements et que Rnd() te retourne 11, ça va te donner un enregistrement inexistant.
'Il faut donc vérifier que l'enregistrement existe avant de l'inscrire dans ta MsFlexGrid.
'Et je pense que tu devrais enlever le + 1
'a = Int(n * Rnd)
'MPi
Ci-dessous, un exemple trouvé sur ce forum (randomize du loto).
Dim aTabSeries(49)
Dim aSuites()
Randomize
Dim i , iRnd
For i = 1 To 49
aTabSeries(i) = i
Next
'redim résultats
ReDim aSuites(6)
Dim Message : Message = "" '<- pour l'exemple
'on créé le tableau de résultat en "désactivant" ceux trouvés
For i = 1 To 6
aSuites(i) = 0
While aSuites(i) = 0
iRnd = Int(49 * Rnd) + 1
If aTabSeries(iRnd) <> 0 Then
aSuites(i) = aTabSeries(iRnd)
aTabSeries(iRnd) = 0
Message = Message & CStr(aSuites(i)) & " . " '& vbCrLf
End If
Wend
Next
melleweb
Messages postés9Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention28 juin 2007 28 juil. 2006 à 14:00
merci ,pour ce probleme ,je l'ai corrigé mnt j'ai un autre voila:
pour remplir une msflexgrid d'une façon aléatoire ,apartir d'un Recordset j'ai utiliser la foction:
Randomize
a = Int((n * Rnd))
RsCal.Move (a)
et ça marche, mé le probleme c'est que parfois elle retourne des enregistrements en double parceque "a" prend la meme valeur aletaoire.
ma question c'est comment puisse je faire pour que le valeur de "a" ne se repete pas.
merci d'avance.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 28 juil. 2006 à 23:35
Salut,
Il faut que tu crées un tableau (array) qui contienne chaque chiffre que RND() te retourne.
Il ne te reste alors qu'à vérifier si le chiffre est dans le tableau
avant d'inscrire ton enregistrement dans la grille. Si le chiffre
existe déjà dans le tableau, donc a déjà été sorti et affiché, tu
refais le RND jusqu'à ce que ce soit un nouveau numéro.
Regarde la routine que JMO t'a envoyée. C'est à peu de chose près ce
que tu recherches. Il y a moyen de faire un peu différent, mais l'idée
est là.