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