FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Comment créer une valeur aléatoire ?
- Comment afficher une lettre aléatoire entre A et Z ?
- Comment mélanger de façon aléatoire tous les mots d'une phrase ?
- Comment permuter les données d'une colonne et de façon aléatoire ?
- Comment générer une série de nombres entiers aléatoires sans doublon ?
- Comment créer des groupes de façon aléatoire ?
- Comment insérer un nombre de croix dans des cellules aléatoires d'une plage ?
Cet exemple crée un nombre entier aléatoire entre 1 et 6 :
Sub
nombreAleatoire_Entre1et6
(
)
Randomize
'Initialisation du générateur de nombres aléatoires
MsgBox
Int
((
6
*
Rnd
) +
1
)
End
Sub
Cette autre macro crée un nombre entier aléatoire compris entre 10 et 15 :
Sub
nombreAleatoireDansPlageValeurs
(
)
Dim
Mini As
Integer
, Maxi As
Integer
Mini =
10
Maxi =
15
Randomize
MsgBox
Int
((
Maxi -
Mini +
1
) *
Rnd
+
Mini)
End
Sub
L'instruction Randomize, utilisée sans argument, permet au générateur de nombres aléatoires de démarrer à chaque
fois sur une valeur différente.
En l'absence de Randomize, la fonction Rnd adopte le même nombre comme valeur initiale la première fois qu'elle est appelée.
Sub
LettreAleatoire
(
)
Dim
Cible As
Byte
Randomize
'Initialisation du générateur de nombres aléatoires
Cible =
Int
((
26
*
Rnd
) +
1
)
MsgBox
Chr
(
Cible +
64
)
End
Sub
Sub
MelangeMots
(
)
Dim
Tableau
(
) As
String
Dim
TabNumLignes
(
) As
Integer
Dim
i As
Integer
, k As
Integer
Dim
Resultat As
String
'Place dans un tableau chaque mot de la chaîne séparé par un espace.
Tableau
(
) =
Split
(
"Un Deux Trois Quatre Cinq"
)
ReDim
TabNumLignes
(
0
To
UBound
(
Tableau
(
)))
For
i =
0
To
UBound
(
Tableau
(
))
TabNumLignes
(
i) =
i
Next
'Initialise le générateur de nombres aléatoires
Randomize
For
i =
UBound
(
Tableau
(
)) To
0
Step
-
1
k =
Int
((
i *
Rnd
))
Resultat =
Resultat &
" "
&
Tableau
(
TabNumLignes
(
k))
TabNumLignes
(
k) =
TabNumLignes
(
i)
Next
MsgBox
Resultat
End
Sub
La macro suivante trie les données de la colonne A de manière aléatoire.
Sub
TriColonneAleatoire
(
)
Dim
Cell As
Range
Dim
NbLignes As
Integer
, NbAleatoire As
Integer
Dim
Tableau
(
), TabTemp
(
)
Dim
i As
Integer
, j As
Integer
, k As
Integer
'Indique le numéro de la dernière ligne non vide dans la colonne A
NbLignes =
Range
(
"A65536"
).End
(
xlUp).Row
ReDim
Tableau
(
NbLignes)
'Remplit le tableau qui va servir au tirage aléatoire
'en utilisant les données de la colonne A.
For
Each
Cell In
Range
(
"A1:A"
&
NbLignes)
Tableau
(
Cell.Row
-
1
) =
Cell
Next
Cell
'Permute les données de façon aléatoire.
For
i =
1
To
NbLignes
Randomize
'Initialise le générateur de nombre aléatoire
'Récupére un numéro de ligne aléatoire dans la tableau contenant les données.
NbAleatoire =
Int
(
Rnd
*
UBound
(
Tableau)) +
1
'Insére dans la cellule la donnée du tableau correspondant à cette valeur aléatoire.
Cells
(
i, 1
) =
Tableau
(
NbAleatoire -
1
)
'Redéfinit la taille du Tableau temporaire.
ReDim
TabTemp
(
NbLignes -
i)
'Transfert les données dans le tableau temporaire, expurgées de la lignes tirée aléatoirement.
For
j =
1
To
NbLignes -
i
k =
0
If
j >=
NbAleatoire Then
k =
1
TabTemp
(
j -
1
) =
Tableau
(
j +
k -
1
)
Next
j
'Retransfère le tableau temporaire dans le tableau de tirage aléatoire.
ReDim
Tableau
(
NbLignes -
i)
For
j =
1
To
NbLignes -
i
Tableau
(
j -
1
) =
TabTemp
(
j -
1
)
Next
j
Next
i
End
Sub
La procédure suivante crée une série de nombres entre 1 et 25, de façon aléatoire et sans doublon.
Les valeurs sont écrites verticalement dans la feuille de calcul, et une option permet d'indiquer à partir de
quelle cellule (B1 dans l'exemple).
Sub
Test
(
)
GenereSerieAleatoireSansDoublons 25
, Range
(
"B1"
)
End
Sub
Sub
GenereSerieAleatoireSansDoublons
(
NbValeurs As
Integer
, Cell As
Range)
Dim
Tableau
(
) As
Integer
, TabNumLignes
(
) As
Integer
Dim
i As
Integer
, k As
Integer
ReDim
Tableau
(
NbValeurs)
ReDim
TabNumLignes
(
NbValeurs)
For
i =
1
To
NbValeurs
TabNumLignes
(
i) =
i
Tableau
(
i) =
i
Next
'Initialise le générateur de nombres aléatoires
Randomize
For
i =
NbValeurs To
1
Step
-
1
k =
Int
((
i *
Rnd
) +
1
)
Cells
(
Cell.Row
+
i -
1
, Cell.Column
) =
Tableau
(
TabNumLignes
(
k))
TabNumLignes
(
k) =
TabNumLignes
(
i)
Next
End
Sub
Il est aussi possible d'effectuer le tirage sans macro :
Insérez la formule = Alea() dans la cellule A1, puis utilisez les poignées
de recopie jusqu'en A25.
Saisissez les nombres 1 à 25 chronologiquement dans la plage B1:B25
Dans la cellule C1 vous saisissez:
=RECHERCHEV
(PETITE.VALEUR
($A$1
:$A$25
;LIGNE
());$A$1
:$B$25
;2
;0
)
puis utilisez les poignées de recopie jusqu'en C25.
Utilisez la touche clavier F9 pour lancer nouveau tirage.
Cet exemple place 20 croix (x) dans des cellules aléatoires de la plage A1:J10.
Sub
Test
(
)
RemplissageAleatoire Range
(
"A1:J10"
), 20
End
Sub
Sub
RemplissageAleatoire
(
Plage As
Range, NbCroix As
Integer
)
Dim
Tableau As
Collection
Dim
Cell As
Range
Dim
i As
Integer
, j As
Integer
'Vérifie si le nombre de cellules est supérieur au nombre de
'croix à insérer.
If
Plage.Cells.Count
<
NbCroix Then
Exit
Sub
'suppression des anciennes données
Cells.Clear
Plage.Interior.ColorIndex
=
7
Set
Tableau =
New
Collection
For
Each
Cell In
Plage
Tableau.Add
Cell.Address
Next
Cell
For
j =
1
To
NbCroix
Randomize
DoEvents
i =
Int
((
Tableau.Count
*
Rnd
)) +
1
Range
(
Tableau
(
i)) =
"x"
Tableau.Remove
i
DoEvents
Next
j
End
Sub