Tirages au sort

Bonjour,

mes recherches dans ce forum n'ont pas abouti mais il est probable que je n'aie pas su utiliser cette fonction car les tirages au sort évoqués ci-dessous ont sans doute déjà été résolus.

Novice dans Excel, je souhaiterais savoir comment effectuer un tirage au sort :

  • sur une plage de nombres (entre 5 et 12, par exemple), de manière à les placer dans un ordre différent que 5 - 6 - 7 - 8 etc ;
  • de même, mais pour plusieurs nombres donnés : 17, 21 et 43, par exemple.
Merci pour votre aide,

Sylvain

Bonjour le forum,

Sub Aleatoire()

Dim plage As Range, cel As Range, alea As Double

Set plage = Range("A1:A5")

For Each cel In plage
1 alea = WorksheetFunction.RandBetween(1, 49)
If Application.CountIf(plage, alea) Then GoTo 1 Else cel = alea
Next

End Sub

Code pour le tirage des cinq numéros du loto.

A adapter selon les besoins.

Pour le classement des tirages :

B1 :

=PETITE.VALEUR($A$1:$A$5;LIGNE())

Formule, une fois adaptée, à tirer vers le bas.

Bonjour,

Proposition d'une fonction personnalisée, à placer dans un module standard, utilisable en formule dans la feuille.

Function TIRAGESELEC(n As Integer)
    Dim tabt(), tablo() As Integer, i%, m%, x%
    Application.Volatile False
    If n < 1 Then
        TIRAGESELEC = CVErr(xlErrNum)
        Exit Function
    End If
    m = Selection.Cells.Count
    ReDim tabt(1 To m)
    If m > n Then
        For i = n + 1 To m
            tabt(i) = CVErr(xlErrNA)
        Next i
        m = n
    End If
    ReDim tablo(n)
    For i = 1 To n
        tablo(i) = i
    Next i
    Randomize
    For i = 1 To n
        x = Int(n * Rnd + 1)
        tablo(0) = tablo(x)
        tablo(x) = tablo(i)
        tablo(i) = tablo(0)
    Next i
    tablo(0) = tablo(n)
    x = Int(n * Rnd + 1)
    For i = 1 To m
        tabt(i) = tablo((x - 1 + i) Mod n)
    Next i
    If Selection.Rows.Count > 1 Then
        TIRAGESELEC = Application.Transpose(tabt)
    Else
        TIRAGESELEC = tabt
    End If
End Function

La fonction est matricielle, c'est le nombre de cellules sélectionnées au départ qui détermine le nombre de résultats renvoyés.

On indique en argument de la fonction sur combien de valeurs on tire.

Exemple : tu sélectionnes 5 cellules, tu tapes la formule : =TIRAGESELEC(49), tu valides par Ctrl+Maj+Entrée (matricielle), et tu obtiens 5 nombres tirés aléatoirement dans la série 1 à 49.

Adaptabilité à ton cas : 1) tu sélectionnes 5 cellules, tu tapes la formule : =TIRAGESELECT(5)+7, tu valides par Ctrl+Maj+Entrée, et tu obtiens les nombres 8, 9, 10, 11, 12 distribués aléatoirement dans tes 5 cellules.

2) tu sélectionnes 3 cellules, tu tapes la formule : =CHOISIR(TIRAGESELEC(3);17;21;43), tu valides par Ctrl+Maj+Entrée, et tu obtiens les nombres 17, 21, 43 distribués aléatoirement dans tes 3 cellules.

La fonction fornctionne sur une sélection verticale ou horizontale.

Elle ne se recalcule pas lors du recalcul de la feuille, mais seulement en relançant par une nouvelle validation, donc recalcul seulement quand tu le décides.

Cordialement.

Bonjour,

Merci pour vos réponses, rapides, mais mon expérimentation l'a été beaucoup moins !

Je ne suis pas parvenu à utiliser la formule =CHOISIR(TIRAGESELEC(3);17;21;43) : avec =Module1.TIRAGESELEC(3);17;21;43), où saisir =CHOISIR ?

Désolé de vous importuner avec une question de béotien...

Cordialement,

Sylvain

Une fonction personnalisée, ça s'utilise comme toute autre fonction d'Excel !

Une fois collée dans un module strandard, tu oublies le module !!

Et tu tapes ta fonction comme n'importe quelle autre !!!

Et tu n'oublies pas de valider avec la combinaison de touches Ctrl+Maj+Entrée car il s'agit d'un fonction matricielle (évident puisqu'on la tape sur plusieurs cellules en même temps !)

Merci ! Cette fois ça fonctionne !

Bien cordialement,

Sylvain

Rechercher des sujets similaires à "tirages sort"