Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment créer une valeur aléatoire ?
auteur : SilkyRoad
Cet exemple crée un nombre entier aléatoire entre 1 et 6:

Vba

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:

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.



Comment afficher une lettre aléatoire entre A et Z ?
auteur : SilkyRoad
Vba
		
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

Comment mélanger de façon aléatoire tous les mots d'une phrase ?
auteur : SilkyRoad
Vba

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

Comment permuter les données d'une colonne et de façon aléatoire ?
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
    
    '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

Comment générer une série de nombres entiers aléatoires sans doublon ?
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
    
    '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.



Comment insérer un nombre de croix dans des cellules aléatoires d'une plage ?
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
    
    '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

precedent    sommaire    suivant   

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.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com