Vba: serie de nombre aleatoire entre bornes

Résolu
LeMANIMAK Messages postés 12 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 5 juillet 2023 - 4 juil. 2023 à 16:43
LeMANIMAK Messages postés 12 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 5 juillet 2023 - 5 juil. 2023 à 16:35

Bonjour,

je voudrai a partir d'un nombre donné ( saisi dans une cellule), générer des entiers de manieres aleatoires. exemple: en saisissant 10, je voudrai afficher aleatoirement les entiers allant de 1 à 10 et sans repetiton.

Sub aleatoire()

 Dim ligne As Long

 Dim nbre As Long

Randomize

 nbre = Range("A3").Value

    For ligne = 2 To nbre

        Cells(ligne, 3) = Int(nbre * Rnd) + 1

     Next ligne

End Sub


Macintosh / Chrome 114.0.0.0

3 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
4 juil. 2023 à 17:28

Bonjour

Une solution pour éviter les doublons (il y en a d'autres)

https://www.cjoint.com/c/MGepBYrpyAB

Cdlmnt

0
LeMANIMAK Messages postés 12 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 5 juillet 2023
5 juil. 2023 à 12:50

Bonjour ccm81. Solution idouane par contre est-il possible d'avoir des éclairages pour chaque ligne de code afin que je comprenne 

Merci d'avance 

0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
5 juil. 2023 à 16:21

Bonjour

Option Explicit

Const celn = "$B$2" ' adresse cellule n
Const celr = "$A$5" ' adresse première cellule résultat

Public Sub ok()
Dim k As Long, n As Long
Dim t() ' tableau qui contiendra les entiers de 1 à n
Dim a As Long, b As Long, c As Long
Randomize
' récupération de n
n = Range(celn).Value
' dimensionner t et
' remplissage de t avec les entiers de 1 à n
ReDim t(1 To n)
For k = 1 To n
  t(k) = k
Next k
' on mélange t
' en permutant 3*n fois les lignes a et b de t
' on peut augmenter le nombre de ces permutations
' j'ai mis 3*n pour tester
For k = 1 To 3 * n
  a = 1 + Int(n * Rnd)
  b = 1 + Int(n * Rnd)
  c = t(a): t(a) = t(b): t(b) = c
Next k
' nettoyage de la plage A5:A10000
Range(celr).Resize(10000, 1).ClearContents
' redimensionner A5 en plage à n lignes et 1 colonne
' et copie de t (transposé : excel considère qu'un tableau
' à une dimension est à 1 ligne)
Range(celr).Resize(n, 1) = Application.Transpose(t)
End Sub

Cdlmnt

0
LeMANIMAK Messages postés 12 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 5 juillet 2023
5 juil. 2023 à 16:35

Merci infiniment ccm81... je peux clore la discussion 

0