| | auteur : SilkyRoad |
Cet exemple crée un nombre entier aléatoire entre 1 et 6:
| Vba |
Sub nombreAleatoire_Entre1et6()
Randomize
MsgBox Int((6 * Rnd) + 1)
End Sub
|
Cette autre macro crée un nombre entier aléatoire compris entre 10 et 15:
| Vba |
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.
|
| | auteur : SilkyRoad | | Vba |
Sub LettreAleatoire()
Dim Cible As Byte
Randomize
Cible = Int((26 * Rnd) + 1)
MsgBox Chr(Cible + 64)
End Sub
|
|
| | auteur : SilkyRoad | | Vba |
Sub MelangeMots()
Dim Tableau() As String
Dim TabNumLignes() As Integer
Dim i As Integer, k As Integer
Dim Resultat As String
Tableau() = Split("Un Deux Trois Quatre Cinq")
ReDim TabNumLignes(0 To UBound(Tableau()))
For i = 0 To UBound(Tableau())
TabNumLignes(i) = i
Next
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
|
|
| | auteur : SilkyRoad |
La macro suivante trie les données de la colonne A de manière aléatoire.
| Vba |
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
NbLignes = Range("A65536").End(xlUp).Row
ReDim Tableau(NbLignes)
For Each Cell In Range("A1:A" & NbLignes)
Tableau(Cell.Row - 1) = Cell
Next Cell
For i = 1 To NbLignes
Randomize
NbAleatoire = Int(Rnd * UBound(Tableau)) + 1
Cells(i, 1) = Tableau(NbAleatoire - 1)
ReDim TabTemp(NbLignes - i)
For j = 1 To NbLignes - i
k = 0
If j >= NbAleatoire Then k = 1
TabTemp(j - 1) = Tableau(j + k - 1)
Next j
ReDim Tableau(NbLignes - i)
For j = 1 To NbLignes - i
Tableau(j - 1) = TabTemp(j - 1)
Next j
Next i
End Sub
|
|
| | auteur : SilkyRoad |
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).
| Vba |
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
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.
|
| | auteur : SilkyRoad |
Cet exemple place 20 croix (x) dans des cellules aléatoires de la plage A1:J10.
| Vba |
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
If Plage.Cells.Count < NbCroix Then Exit Sub
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
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2008
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|