Un nombre aléatoire

Vbsupernul Messages postés 287 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 18 janvier 2004 - 22 déc. 2002 à 19:09
SATANdemon Messages postés 44 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 30 novembre 2005 - 23 déc. 2002 à 20:05
Ben voilà, j'essaye de choisir un nombre aléatoire qui ne se répète jamais. j'ai donc fais cette sub, mais ça fait boguer, ça recommence trop de fois...
Private Sub Command1_Click()
Dim lenombre As String
Dim nombre As Integer
anciennombre = 0
nbdefois = 1
start:
If nbdefois = 51 Then
Exit Sub
ElseIf nbdefois < 51 Then
GoTo debut
End If
debut:
Randomize Timer
nombre = Int((Rnd * 51) + 1)
lenombre = nombre
If Len(lenombre) = 1 Then
lenombre = 0 & nombre
nombre = lenombre
End If
donc:
If InStr(Text1.Text, nombre) <> 0 Then
GoTo alors
ElseIf InStr(Text1.Text, nombre) = 0 Then
Text1.Text = Text1.Text & nombre & vbCrLf
anciennombre = nombre
nbdefois = nbdefois + 1
GoTo start
End If
nombre = 1
alors:
nombre = nombre + 1
If nombre = 51 Then
GoTo start
End If
GoTo donc
End Sub

QQun peut-il essayer de l'optimiser ou d'en faire une qui marche?

@+
Vbsupernul (à force de poster des sos, je vais finir par devenir moins nul :clown) )

1 réponse

SATANdemon Messages postés 44 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 30 novembre 2005
23 déc. 2002 à 20:05
Private Sub Command1_Click()

  Dim ListeNombre() As Integer
  Dim Nombre As Integer
  Dim Texte As String
  Dim i As Integer
  Dim x As Integer
  Dim Continue As Boolean
  
  'Vide le champ de texte
  Text1.Text = vbNullString
  
  'Initialise la fonction Rnd
  Randomize
  
  'Dimentionne le Tableau
  ReDim ListeNombre(0)
  
  'Insert un nombre 0 pour la premiere instance
  ListeNombre(0) = 0
  
  For i = 1 To 51
    
    Continue = False
    
    Do While Continue = False
      DoEvents
      'Genere un nombre aleatoire entre 1 et 51
      Nombre = Int((Rnd * 51) + 1)
      'Met la valeur de sorti de boucle sur True
      Continue = True
      'Verifie si il n'y a pas de double
      For x = LBound(ListeNombre) To UBound(ListeNombre)
        If ListeNombre(x) = Nombre Then
          'Si le nombre existe deja on met sur False
          Continue = False
        End If
      Next x
    Loop
    
    'Converti le nombre en STRING et l'affecte a la variable TEXTE
    Texte = CStr(Nombre)
    
    'Redimentionne le Tableau en preservant les valeurs
    ReDim Preserve ListeNombre(i)
    'Insert le nouveau nombre
    ListeNombre(i) = Nombre
    
    'Si la longueur est de 1 on rajoute un 0 devant
    If Len(Texte) = 1 Then
      Texte = "0" & Texte
    End If
    
    'On rempli le champs texte
    Text1.Text = Text1.Text & Texte & vbCrLf
    
  Next i

End Sub


Voila qui fera ton bonheur, je te deconseil les GOTO en general on se perd rapidement dans le code :)
0
Rejoignez-nous