Fonction Random ! Rnd ? [Résolu]

Messages postés
114
Date d'inscription
mardi 6 juillet 2004
Dernière intervention
4 décembre 2009
- - Dernière réponse : zialex
Messages postés
3
Date d'inscription
lundi 21 juin 2010
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
22
3
Merci
"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é ...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
30
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
22
3
Merci
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


 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
114
Date d'inscription
mardi 6 juillet 2004
Dernière intervention
4 décembre 2009
0
Merci
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
Commenter la réponse de robapt
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
22
0
Merci
va voir là (avec une listbox, c'est facile)

http://www.vbfrance.com/codes/EXTRAIRE-NOMBRES-ALEATOIRES-SANS-DOUBLONS_40774.aspx
Commenter la réponse de jmfmarques
Messages postés
3
Date d'inscription
lundi 21 juin 2010
Dernière intervention
27 septembre 2010
0
Merci
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.
Commenter la réponse de zialex
Messages postés
3
Date d'inscription
lundi 21 juin 2010
Dernière intervention
27 septembre 2010
0
Merci
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 !!!
Commenter la réponse de zialex

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.