| 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.
|