Créer une fonction qui renvoie des nombres entiers relatifs aléatoires différents dans un intervalle donné.
Cette fonction peut être utile pour simuler des tirages simultanés.
Function AleaEntiersDistinctsEntreBornes(BorneInf As Long, BorneSup As Long, Plage As Range)
Dim i As Long
Dim j As Long
Dim NbIterationMaxi As Integer
Dim nbValeurs As Long, nbLignes As Long, nbColonnes As Long
Dim Tableau() As Long, Tableau2D() As Long
Application.Volatile True
Randomize
nbLignes = Plage.Rows.Count
nbColonnes = Plage.Columns.Count
nbValeurs = nbLignes * nbColonnes
BorneSup = BorneSup - BorneInf + 1
If nbValeurs >= BorneSup + 1 Then End
ReDim Tableau(1 To nbValeurs)
Tableau(1) = Int(BorneSup * Rnd + BorneInf)
For i = 2 To nbValeurs
Tableau(i) = Int(BorneSup * Rnd + BorneInf)
For j = 1 To i - 1
If Tableau(i) = Tableau(j) Then
NbIterationMaxi = NbIterationMaxi + 1
j = 0
Tableau(i) = Int(BorneSup * Rnd + BorneInf)
End If
If NbIterationMaxi = 100 Then
Exit Function
End If
Next j
NbIterationMaxi = 0
Next i
If nbColonnes = 1 Then
AleaEntiersDistinctsEntreBornes = Application.Transpose(Tableau)
Else
If nbLignes = 1 Then
AleaEntiersDistinctsEntreBornes = Tableau
Else
ReDim Tableau2D(1 To nbLignes, 1 To nbColonnes)
For i = 1 To nbLignes
For j = 1 To nbColonnes
Tableau2D(i, j) = Tableau((i - 1) * nbColonnes + j)
Next j
Next i
AleaEntiersDistinctsEntreBornes = Tableau2D
End If
End If
End Function
Un classeur enregistré en tant que complément doit contenir au moins une feuille. La feuille de module ne sera plus visible dans le complément pour modification.
Le classeur AleaEntiersDistincts avec le code non protégé et quelques exemples (.zip 11 ko)
Les documents présentés ne sont pas libres de droits. Vous pouvez les télécharger et diffuser (en indiquant la provenance) à condition de ne pas en faire un usage commercial.