<Retour Grenier>

Début de page Question

Comment tirer des nombres aléatoires dans une requête ?
La fonction Rnd() semble ne pas fonctionner : elle produit toujours le même nombre.

Pour utiliser ce qui suit, vous avez besoin de savoir taper du code Visual Basic dans un module Access, compiler du code, et exécuter du code.
Vous devez également savoir comment créer un champ calculé dans une requête.

 

Début de page Réponse

En fait, la fonction Rnd() sort bien un nombre aléatoire différent à chaque appel.
La nuance est que, dans une requête, cette fonction n'est appelée qu'une seule fois, pour des raisons de performance.

Une astuce consiste à appeler une fonction en lui passant une valeur qui change à chaque fois, par exemple un champ de la requête.

Voici par exemple une nouvelle fonction ForceAlea(), à taper dans un module classique :

' --------------------------------------------------
' FONCTION ALEA POUR REQUETE
' --------------------------------------------------
' Entrée :    intInf <- Borne inférieure
'             intSup <- Borne supérieure
'                  v <- Une valeur quelconque, ou un champ de requête
' Sortie : ForceAlea -> Nombre entier entre intInf et infSup compris
'
Function ForceAlea(intInf As Integer, intSup As Integer, v As Variant) As Integer
Randomize
ForceAlea = Int(Rnd * (intSup - intInf + 1)) + intInf
End Function

Voici un exemple d'utilisation de cette fonction dans une requête (la requête est basée sur une table tblEssai, contenant le champ Quantité) :

Deux appels successifs de la requête produisent des résultats différents :