robapt
Messages postés114Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention 4 décembre 2009
-
4 janv. 2008 à 14:51
zialex
Messages postés3Date d'inscriptionlundi 21 juin 2010StatutMembreDernière intervention27 septembre 2010
-
21 juin 2010 à 16:55
Bonjour à tous !
Voila, je fais un petit prog qui utilise la fonction Rnd et je voudrais savoir un truc.
Voici mon code :
Randomize
List1.AddItem Int((50 * Rnd) + 1)
Je n'est pas marqué tout le code mais en fait,j'ajoutte 10 nombre au hazard dans la listbox List1.
Comment faire pour que si le même nombre est tiré 2 fois ou plus, cela refase un Random juste pour les nombre identique ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 4 janv. 2008 à 14:58
"Comment faire pour que si le même nombre est tiré 2 fois ou plus, cela refase un Random juste pour les nombre identique ?"
Je ne comprends pas ...
Veux-tu simplement dire que tu bne veuxpas que le même nombre sorte 2 fois ?
Si oui : il ne faut pas "retirer" (ce n'est pas la meilleure méthode, qui risque de s'avérer lente) mais "éliminer" le nombre déjà tiré ...
Function
GetSingleValue(ByRef aArr() As String, sResult As String) As Boolean
If UBound(aArr) = 0 Then
' reste rien
GetSingleValue = False
Else
GetSingleValue = True
' on récupère un index
Dim Index As Long
Index = Int((UBound(aMyArray) * Rnd) + (LBound(aMyArray) + 1))
' on récupère la valeur
sResult = aArr(Index)
' on écrase la position par la dernière valeur et on supprime la dernière position
aArr(Index) = aArr(UBound(aArr))
ReDim Preserve aArr(UBound(aArr) - 1)
End If
End Function
' EXEMPLE D'UTILISATION (nécessite un bouton et une textbox)
Option Explicit
Dim aMyArray() As String 'attention, la premier index (0 ici) ne sera pas utilisé
'
'
Private Sub Form_Load()
' applique le facteur "aléatoire"
Randomize Timer
' redimension et remplissage du tableau
Dim i As Long
ReDim aMyArray(0 To 10)
For i = LBound(aMyArray) + 1 To UBound(aMyArray)
aMyArray(i) = "chaîne [" & CStr(i) & "]"
Next i
' pour le test....
Text1.Width = 2895
Text1.Text = vbNullString
End Sub
'
'
Private Sub Command1_Click()
Dim sRet As String
If GetSingleValue(aMyArray, sRet) Then
Text1.Text = sRet
Else
Text1.Text = "Toutes les valeurs ont été piochées"
End If
End Sub
++
PCPT [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 4 janv. 2008 à 15:42
Tiens...
Avec un tableau et sans le redimensionner :
Private Sub Command1_Click()
Randomize Timer
Dim monnombre As Integer, combien As Integer, i As Integer, nb As Integer
monnombre = 20 ' ici ton nombre max
combien = 5 ' ici le nombre de tes titages (qui doit être inférieur ou égal à monnombre)
ReDim montable(monnombre - 1)
For i = 0 To monnombre - 1
montable(i) = i + 1
Next
nb = UBound(montable)
Dim ou As Integer, temp As String
For i = 0 To nb \ 2
ou = Int(((nb - i) * Rnd))
temp = montable(ou)
montable(ou) = montable(nb - i)
montable(nb - i) = temp
Next
List1.Clear
For i = 1 To combien
List1.AddItem montable(i - 1)
Next
End Sub
Ajoute une listbox list1 et un bouton Commande1
Fixe comme tu l'entends les valeurs de monnombre et de combien
robapt
Messages postés114Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention 4 décembre 2009 4 janv. 2008 à 15:05
oui c'est sa! Désolé si j'ai été un peu flou dans mes explications! lol
Bon ok je vais faire mes recherche sur ce fameux "retirer"! ^^
Bon ben merci beaucoup jmfmarques !
Bon prog
Vous n’avez pas trouvé la réponse que vous recherchez ?
zialex
Messages postés3Date d'inscriptionlundi 21 juin 2010StatutMembreDernière intervention27 septembre 2010 21 juin 2010 à 16:13
Bonjour jmfmarques,
J'ai copier ton codes pour générer un numéro aléatoire entre 100000000 et 999999999,
J'ai donc remplacé monnombre 20 par monnombre 999999999 et conbien = 5 par conbien = 100000000 et quand je clique sur mon bouton générer il me dit "érreur d'exécution '6'" > Dépassement de capacité.
Sa te dit quelque chose? ...
Et je voulait savoir si ton codes comme parlait plus haut par robapt répètai l'opération si le numéro éxistai déja?