Générer des nombres aléatoires uniques, Excel VBA

Générer des nombres aléatoires uniques, Excel VBA

Voici une explication détaillée sur la manière de générer des nombres aléatoires uniques dans Excel VBA, avec un code complet.
Objectif
L’objectif est de créer un script VBA qui génère un nombre spécifié de nombres aléatoires uniques dans Excel. Le principal défi est de garantir que chaque nombre généré soit unique (pas de doublons).
Étapes et Explication
1. Configuration initiale :

  • Nous allons créer une sous-routine qui prend quelques paramètres :
    • Le nombre total de nombres à générer (par exemple, 10 nombres aléatoires uniques).
    • La plage des nombres aléatoires (par exemple, entre 1 et 100).
  • Le programme générera des nombres dans la plage spécifiée et s’assurera qu’ils sont uniques.

2. Génération des Nombres Aléatoires :

  • La méthode standard pour générer des nombres aléatoires dans VBA est la fonction Rnd. Cependant, cette fonction génère des nombres flottants entre 0 et 1. Pour obtenir des entiers, nous utilisons la formule suivante :
  • Int((limite supérieure – limite inférieure + 1) * Rnd + limite inférieure)

limite supérieure est la valeur maximale et limite inférieure est la valeur minimale.
3. Assurer l’Unicité :

  • Pour garantir que les nombres soient uniques, nous allons stocker chaque nombre généré dans un tableau ou une collection.
  • Nous générerons des nombres aléatoires à plusieurs reprises et vérifierons si le nombre généré existe déjà dans la collection. Si c’est le cas, nous en générerons un autre.
  • Le processus continuera jusqu’à ce que le nombre requis de nombres uniques soit généré.

4. Stockage des Résultats :

  • Les nombres aléatoires uniques seront écrits dans une feuille de calcul Excel.

Code VBA : Générer des Nombres Aléatoires Uniques

Sub GenerateUniqueRandomNumbers()
    Dim totalNumbers As Integer
    Dim lowerBound As Integer
    Dim upperBound As Integer
    Dim uniqueNumbers As Collection
    Dim randomNumber As Integer
    Dim i As Integer
    Dim rowNum As Integer
    Dim found As Boolean
    ' Définir les paramètres pour les nombres aléatoires
    totalNumbers = 10  ' Nombre de nombres aléatoires uniques à générer
    lowerBound = 1     ' Valeur minimale des nombres aléatoires
    upperBound = 100   ' Valeur maximale des nombres aléatoires
    ' Initialiser la collection pour contenir les nombres uniques
    Set uniqueNumbers = New Collection
    ' Commencer à insérer les nombres dans la feuille (à partir de la ligne 2)
    rowNum = 2
    ' Boucle jusqu'à ce que le nombre désiré de nombres uniques soit généré
    Do While uniqueNumbers.Count < totalNumbers
        ' Générer un nombre aléatoire dans la plage spécifiée
        randomNumber = Int((upperBound - lowerBound + 1) * Rnd + lowerBound)
        ' Vérifier si le nombre est déjà dans la collection (vérification d'unicité)
        found = False
        On Error Resume Next  ' Ignorer l'erreur si le nombre n'est pas trouvé
        uniqueNumbers.Item randomNumber
        If Err.Number = 0 Then
            found = True ' Le nombre existe déjà dans la collection
        End If
        On Error GoTo 0 ' Réinitialiser la gestion des erreurs
        ' Si le nombre n'est pas trouvé, l'ajouter à la collection
        If Not found Then
            uniqueNumbers.Add randomNumber
            ' Écrire le nombre unique dans la feuille de calcul (à partir de la ligne 2, colonne 1)
            Cells(rowNum, 1).Value = randomNumber
            rowNum = rowNum + 1
        End If
    Loop
    MsgBox "Les nombres aléatoires uniques ont été générés !"
End Sub

Explication Détailée du Code
1. Définir les paramètres :

totalNumbers = 10  ' Nombre de nombres aléatoires uniques à générer
lowerBound = 1     ' Valeur minimale des nombres aléatoires
upperBound = 100   ' Valeur maximale des nombres aléatoires
  • totalNumbers définit combien de nombres uniques nous voulons générer.
  • lowerBound et upperBound spécifient la plage dans laquelle les nombres aléatoires seront générés.

2. Initialisation de la Collection :
Set uniqueNumbers = New Collection

  • Une Collection est utilisée pour stocker les nombres uniques, car les collections ne permettent pas d’ajouter des valeurs en double. Si un doublon est ajouté, cela génère une erreur que nous pourrons gérer pour vérifier l’unicité.

3. Générer des Nombres Aléatoires et Assurer l’Unicité :
randomNumber = Int((upperBound - lowerBound + 1) * Rnd + lowerBound)

  • Rnd génère un nombre aléatoire entre 0 et 1. En l’échelonnant avec (upperBoundlowerBound + 1) et en ajoutant lowerBound, nous obtenons un nombre dans la plage spécifiée (entre lowerBound et upperBound).

4. Vérifier les Doublons :

On Error Resume Next  ' Ignorer l'erreur si le nombre n'est pas trouvé
uniqueNumbers.Item randomNumber
If Err.Number = 0 Then
    found = True
End If
On Error GoTo 0  ' Réinitialiser la gestion des erreurs
  • Nous utilisons la gestion des erreurs pour vérifier si le nombre aléatoire est déjà présent dans la collection.
  • Si le nombre existe déjà dans la collection, Err.Number sera égal à 0 et nous marquerons le nombre comme trouvé. Si ce n’est pas le cas, nous l’ajoutons à la collection.

5. Ajouter le Nombre à la Feuille de Calcul :

Cells(rowNum, 1).Value = randomNumber
rowNum = rowNum + 1
  • Si le nombre est unique, nous l’ajoutons dans la feuille Excel à partir de la cellule A2. La variable rowNum est incrémentée pour insérer le nombre suivant sur une nouvelle ligne.

6. Boucle jusqu’à Génération des Nombres Uniques :

Do While uniqueNumbers.Count < totalNumbers
    ' Générer et vérifier l'unicité ici...
Loop
  • La boucle continue jusqu’à ce que le nombre requis de nombres uniques soit généré.

7. Message de Confirmation :
MsgBox "Les nombres aléatoires uniques ont été générés !"

  • Une fois la boucle terminée et tous les nombres uniques générés, un message s’affiche pour informer l’utilisateur que le processus est terminé.

Comment Utiliser le Code
1. Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
2. Insérez un nouveau module en allant dans Insertion > Module.
3. Copiez et collez le code ci-dessus dans le module.
4. Fermez l’éditeur et exécutez la macro en appuyant sur Alt + F8, puis sélectionnez GenerateUniqueRandomNumbers et cliquez sur Exécuter.
5. Les nombres aléatoires uniques seront insérés à partir de la cellule A2 dans votre feuille Excel.
Conclusion
Ce code vous permet de générer un nombre spécifié de nombres aléatoires uniques dans une plage donnée dans Excel à l’aide de VBA. En utilisant une Collection, nous assurons qu’il n’y a pas de doublons, et grâce à la gestion des erreurs, nous pouvons vérifier si un nombre existe déjà dans la collection avant de l’ajouter. Les résultats sont ensuite inscrits directement dans une feuille Excel.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x