Générer des nombres aléatoires, Excel VBA
Voici un code VBA détaillé pour générer des nombres aléatoires dans Excel. Je vais l’expliquer étape par étape pour que vous puissiez bien comprendre chaque partie du code.
Objectif :
Ce code va générer des nombres aléatoires dans une plage spécifiée et les placer dans des cellules de votre feuille Excel. Vous pouvez personnaliser la plage et le nombre de valeurs aléatoires que vous souhaitez générer.
Code VBA pour générer des nombres aléatoires :
Sub GenerateRandomNumbers() ' Définir les variables Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim minValue As Double Dim maxValue As Double Dim numberOfValues As Long Dim isInteger As Boolean ' Initialiser les variables Set ws = ThisWorkbook.Sheets("Sheet1") ' Remplacez par le nom de votre feuille Set rng = ws.Range("A1:A10") ' Remplacez par la plage où vous souhaitez les valeurs minValue = 1 ' Valeur minimale pour générer des nombres aléatoires maxValue = 100 ' Valeur maximale pour générer des nombres aléatoires numberOfValues = rng.Cells.Count ' Nombre de cellules à remplir avec des nombres aléatoires isInteger = True ' Mettre à True pour générer des entiers, False pour des décimaux ' Boucle à travers chaque cellule dans la plage For Each cell In rng If isInteger Then ' Générer un nombre entier aléatoire entre minValue et maxValue cell.Value = Int((maxValue - minValue + 1) * Rnd + minValue) Else ' Générer un nombre décimal aléatoire entre minValue et maxValue cell.Value = (maxValue - minValue) * Rnd + minValue End If Next cell End Sub
Explication détaillée du code :
1. Définir les variables :
La première étape consiste à définir les variables nécessaires. Cela nous permettra de gérer la feuille de calcul cible, la plage de cellules où nous voulons placer les nombres aléatoires et d’autres paramètres comme la valeur minimale et maximale pour la génération des nombres.
Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim minValue As Double Dim maxValue As Double Dim numberOfValues As Long Dim isInteger As Boolean
ws
fait référence à la feuille de calcul où les nombres aléatoires seront générés.rng
fait référence à la plage de cellules où les nombres aléatoires seront placés.minValue
etmaxValue
définissent les limites de la génération des nombres aléatoires.numberOfValues
contient le nombre de cellules dans la plage spécifiée.isInteger
est un indicateur booléen pour décider si l’on génère des entiers ou des nombres décimaux.
2. Initialisation des variables :
Après avoir défini les variables, vous les initialisez avec les valeurs appropriées. Vous pouvez ajuster ces valeurs selon vos besoins.
Set ws = ThisWorkbook.Sheets("Sheet1") ' Remplacez par le nom de votre feuille Set rng = ws.Range("A1:A10") ' Remplacez par la plage que vous souhaitez minValue = 1 ' Valeur minimale pour générer des nombres aléatoires maxValue = 100 ' Valeur maximale pour générer des nombres aléatoires numberOfValues = rng.Cells.Count ' Nombre de cellules à remplir avec des nombres aléatoires isInteger = True ' Mettre à True pour générer des entiers, False pour des décimaux
- ws est défini sur la feuille « Sheet1 ». Vous pouvez remplacer « Sheet1 » par le nom de la feuille de votre choix.
- rng est défini sur la plage A1:A10. Vous pouvez changer cette plage par la vôtre (par exemple, B1:B50).
- minValue et maxValue sont respectivement définis sur 1 et 100. Ce sont les bornes pour la génération des nombres aléatoires.
- numberOfValues est défini automatiquement sur le nombre de cellules dans la plage spécifiée (A1:A10 dans cet exemple), ce qui permet au code de savoir combien de nombres aléatoires générer.
- isInteger est défini sur True, ce qui signifie que le code va générer par défaut des nombres entiers (entiers).
3. Générer des nombres aléatoires :
For Each cell In rng If isInteger Then ' Générer un nombre entier aléatoire entre minValue et maxValue cell.Value = Int((maxValue - minValue + 1) * Rnd + minValue) Else ' Générer un nombre décimal aléatoire entre minValue et maxValue cell.Value = (maxValue - minValue) * Rnd + minValue End If Next cell
Cette boucle passe en revue chaque cellule de la plage (rng) et, pour chaque cellule, génère un nombre aléatoire.
- Rnd : Cette fonction génère un nombre aléatoire compris entre 0 et 1 (exclu). Elle est utilisée pour générer des nombres dans la plage souhaitée.
- Nombres entiers : Si isInteger est True, le code génère un entier aléatoire en utilisant la fonction Int. L’expression (maxValue – minValue + 1) * Rnd + minValue garantit que le nombre aléatoire est compris entre minValue et maxValue inclus.
- Nombres décimaux : Si isInteger est False, le code génère un nombre décimal aléatoire en utilisant la formule (maxValue – minValue) * Rnd + minValue, garantissant que le nombre se situe dans la plage spécifiée.
4. Explication de la formule pour générer des nombres aléatoires :
La formule utilisée pour générer des nombres aléatoires est la suivante :
randomNumber = (maxValue - minValue + 1) * Rnd + minValue
- maxValue – minValue + 1 : Cette partie calcule l’étendue des valeurs possibles.
- Rnd : Génère un nombre aléatoire compris entre 0 et 1.
- (maxValue – minValue + 1) * Rnd : Cette expression met l’échelle pour que le nombre aléatoire tombe dans l’intervalle souhaité (de 0 à la largeur de l’intervalle).
- + minValue : Cette partie déplace le nombre généré pour qu’il commence à minValue et atteigne maxValue.
Cette formule garantit que les nombres aléatoires sont bien compris entre minValue et maxValue et sont correctement mis à l’échelle.
5. Placer les nombres dans les cellules :
Une fois que le nombre aléatoire est généré pour chaque cellule, il est affecté à la valeur de la cellule correspondante à l’aide de :
cell.Value = randomNumber
Personnalisation :
- Plage : Vous pouvez modifier la plage où les nombres aléatoires seront placés. Modifiez la ligne Set rng = ws.Range(« A1:A10 ») selon vos besoins (par exemple, B1:B20, C1:C50).
- Type de valeur : Si vous souhaitez générer des nombres décimaux, modifiez la valeur de isInteger à False.
- Valeurs minimales et maximales : Modifiez les variables minValue et maxValue pour changer la plage des nombres générés.
Cette approche vous offre une grande flexibilité pour générer des nombres aléatoires en fonction de vos besoins.