Hasard dans une requête
Comment tirer des nombres aléatoires dans une requête ? La fonction
Rnd()
semble ne pas fonctionner : elle produit toujours le même nombre.
Solution
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' --- ' 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( _ ByVal intInf As Integer, _ ByVal intSup As Integer, _ ByVal v As Variant) As Integer Randomize ForceAlea = Int(Rnd * (intSup - intInf + 1)) + intInf End Function |
Exemple
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 :