Sub Aleatoire(LimInf As Long, Crochet1 As String, LimSup As Long, Crochet2 As String, virgule As Byte, Plage As Range)
'Dresse une liste de nombres aléatoires compris entre 2 limites établies
'- LimInf : la plus petite valeur possible de la fourchette de nombres possibles
'- Crochet1 : si "[" --> LimInf est inclue
' si "]" --> LimInf est exclue
'- LimSup : la plus grande valeur possible de la fourchette de nombres possibles
'- Crochet2 : si "]" --> LimSup est inclue
' si "[" --> LimSup est exclue
'- Virgule : si = 0 --> nombres entiers
' si > 0 --> détermine alors le nombre de décimales après la virgule (max : 30)
'- Plage : plage où apparaissent les nombres aléatoires
'job75 / Magic_Doctor
Dim NbLgn As Long, dico As Object, X$, Y$
If Crochet1 <> "[" And Crochet1 <> "]" Or Crochet2 <> "[" And Crochet2 <> "]" Then End
If Crochet1 = "]" Then LimInf = LimInf + 1 / 10 ^ virgule
If Crochet2 = "[" Then LimSup = LimSup - 1 / 10 ^ virgule
NbLgn = Plage.Rows.Count 'nombre de lignes de la plage [Plage]
If (LimSup - LimInf) * 10 ^ virgule < NbLgn Then End
Set dico = CreateObject("Scripting.Dictionary")
Randomize
While dico.Count < NbLgn
X = Int((LimSup - LimInf) * Rnd + LimInf)
Y = ""
If virgule Then
If virgule < 16 Then
Y = Mid(Format(CDbl(Rnd), "0." & String(virgule, "0")), 2)
Else
Y = Mid(Format(CDbl(Rnd), "0." & String(15, "0")), 2)
Y = Y & Mid(Format(CDbl(Rnd), "0." & String(virgule - 15, "0")), 3)
End If
End If
dico(X & Y) = ""
Wend
Plage = Application.Transpose(dico.keys)
End Sub