Fonction Random ! Rnd ?

Résolu
robapt Messages postés 114 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 4 décembre 2009 - 4 janv. 2008 à 14:51
zialex Messages postés 3 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 27 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 ?

Merci à tous

7 réponses

jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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é ...
3
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
4 janv. 2008 à 15:07
salut,

peut de modifications à apporter par rapport à ce snippet :
http://www.codyx.org/snippet_recuperer-aleatoirement-valeur-unique-tableau_348.aspx#1098

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
3
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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


 
3
robapt Messages postés 114 Date d'inscription mardi 6 juillet 2004 Statut Membre Derniè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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
4 janv. 2008 à 15:12
0
zialex Messages postés 3 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 27 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?

Merci.
0
zialex Messages postés 3 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 27 septembre 2010
21 juin 2010 à 16:55
Re Bonjour,
Laissez tombé J'ai d'autre probleme avec mon codes et mon projet, et désoler pour l'ortographe et le vous vois !!!
0