Fonction Random ! Rnd ? [Résolu]

Signaler
Messages postés
114
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
4 décembre 2009
-
Messages postés
3
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
27 septembre 2010
-
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

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
"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é ...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
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


 
Messages postés
114
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
4 décembre 2009

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Messages postés
3
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
27 septembre 2010

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.
Messages postés
3
Date d'inscription
lundi 21 juin 2010
Statut
Membre
Dernière intervention
27 septembre 2010

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 !!!