Sub Test_a_la_suite()
Dim MonTirage, i, Nval
Nval = [H5]
Range("A2:A1000").ClearContents
MonTirage = Tirage_a_la_Suite([H3], [H4], [H5], True)
For i = 1 To Nval
ActiveSheet.Range("A2").Offset(i - 1, 0).Value = MonTirage(i)
Next i
End Sub
Sub Test_PAS_a_la_suite()
Dim MonTirage, i, Nval
Nval = [H5]
Range("A2:A1000").ClearContents
MonTirage = Tirage_a_la_Suite([H3], [H4], [H5], False)
For i = 1 To Nval
ActiveSheet.Range("A2").Offset(i - 1, 0).Value = MonTirage(i)
Next i
End Sub
Function Tirage_a_la_Suite(Inf As Long, Sup As Long, Nvaleurs, AlaSUITE As Boolean) As Variant
' Tirage de Nvaleurs entre Inf et Sup
' si AlaSUITE est FAUX
' les dernières valeurs au delà du plus grand multiple de (Sup-Inf+1)
' sont tirées au hasard entre Inf et Sup mais pas deux fois la même valeur
' si AlaSUITE est VRAI
' les dernières valeurs au delà du plus grand multiple de (Sup-Inf+1)
' sont les valeurs Inf, Inf+1, Inf+2...
Dim Valeur, i, k, Temp
ReDim T(1 To Nvaleurs)
Valeur = Inf
For i = 1 To (Sup - Inf + 1) * (Nvaleurs \ (Sup - Inf + 1))
T(i) = Valeur
Valeur = Valeur + 1
If Valeur > Sup Then Valeur = Inf
Next i
If AlaSUITE = True Then
For i = 1 + (Sup - Inf + 1) * (Nvaleurs \ (Sup - Inf + 1)) To Nvaleurs
T(i) = Valeur
Valeur = Valeur + 1
If Valeur > Sup Then Valeur = Inf
Next i
Else
'tirage de (Sup - Inf + 1) valeurs
ReDim n(1 To (Sup - Inf + 1))
For i = Inf To Sup
n(i) = i
Next i
For i = 1 To (Sup - Inf + 1)
' k = Application.WorksheetFunction.RandBetween(i, (Sup - Inf + 1))
k = Int(Rnd * (Sup - Inf + 1)) + Inf
Temp = n(i): n(i) = n(k): n(k) = Temp
Next i
'On copie les valeurs au delà du multiple de 13 dans le tableau T pour le compléter
k = 0
For i = 1 + (Sup - Inf + 1) * (Nvaleurs \ (Sup - Inf + 1)) To Nvaleurs
k = k + 1
T(i) = n(k)
Next i
End If
'on secoue le tout !
For i = 1 To Nvaleurs
' k = Application.WorksheetFunction.RandBetween(i, Nvaleurs)
k = Int(Rnd * (Nvaleurs - i + 1)) + i
Temp = T(i): T(i) = T(k): T(k) = Temp
Next i
Tirage_a_la_Suite = T
End Function