Nombre aléatoire vba (excel)

Résolu
eljojo_e Messages postés 1255 Statut Membre -  
eljojo_e Messages postés 1255 Statut Membre -
Bonjour,

J'aimerai, par pure curiosité, écrire un code qui génère un nombre aléatoire sans utiliser de fonction.
Je me demande si il y a un calcul mathématique qui permet ca, ou alors se baser sur le temps (en ms).

Si vous avez des idées,

Cordialement,

3 réponses

  1. thordek Messages postés 37 Statut Membre 9
     
    Bonjour eljojo_e,

    Tu devrais te baser sur une loi normal.

    Par contre, dans VBA comme dans Excel, tu as des fonctions pour, comme tu l'as dis. Pourquoi faire compliquer quand on peut faire simple ?

    Cordialement,

    Thordek
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour satisfaire ta curiosité, il est bien entendu plus simple d'utiliser les fonctions natives d'excel ou de vba (ALEA() et Randomize).
    Cependant, il est toujours possible de créer une procédure permettant de réaliser plus ou moins ce que tu souhaites.
    En partant du principe que la mémoire de l'ordi ne travaille pas systématiquement à la même vitesse, on peux remplir une "grosse" variable tableau avec des chiffres de 1 à 100, ensuite, déclencher un chronomètre et sortir un résultat "aléatoire".
    Voici un code possible :
    Option Explicit 
    
    Sub NombreAleatoire() 
    Dim Tabl(1 To 1000, 1 To 1000) 
    Dim t, i As Long, j As Long, Cpt As Integer 
    
    Cpt = 1 '1er nombre aléatoire !!! Nbre Entier !!! 
    For i = 1 To UBound(Tabl, 1) 
        For j = 1 To UBound(Tabl, 2) 
            Tabl(i, j) = Cpt 
            If Cpt = 100 Then Cpt = 0 ' 100 = dernier nbre aléatoire 
    'pour cet exemple j'ai choisi des nombres de 1 à 100 ENTIERS!!! 
            Cpt = Cpt + 1 
        Next j 
    Next i 
    t = Timer 
    i = 1 
    j = 1 
    Do While Timer <= t + 1 'ici on peux allonger le temps 
    'pour rendre encore + aleatoire la procédure
    'affichage en cellule A1 
        Cells(1, 1) = Tabl(i, j) 
        If i = 1000 Then i = 0 
        If j = 1000 Then j = 0 
        i = i + 1 
        j = j + 1 
    Loop 
    End Sub


    Cordialement,
    Franck P
    0
    1. eljojo_e Messages postés 1255 Statut Membre 155
       
      Super ton code !
      Merci bien !
      0
  3. eljojo_e Messages postés 1255 Statut Membre 155
     
    ^^ Oui c'est sur, mais pour ta question "Pourquoi faire compliquer quand on peut faire simple?", c'est uniquement par pur curiosité.

    Voilà,

    Cordialement,
    -1