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)
où 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 (upperBound – lowerBound + 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.