Vba: serie de nombre aleatoire entre bornes

Résolu
LeMANIMAK Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
LeMANIMAK Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -

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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     

    Bonjour

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

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

    Cdlmnt

    0
    1. LeMANIMAK Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       

      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     

    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
  3. LeMANIMAK Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
     

    Merci infiniment ccm81... je peux clore la discussion 

    0