[Excel] Tirage aléatoire lignes d'un tableau

Résolu
qjungers Messages postés 2 Statut Membre -  
qjungers Messages postés 2 Statut Membre -
Bonjour,
Je souhaite effectuer un tirage aléatoire de lignes sur un tableau. Le tableau fait environ 10000x20 et je souhaite créer un autre tableau (sur un autre onglet) qui serait constituer de 500 lignes sélectionner aléatoirement de ce tableau.
Mille Merci d'avance

Jung

5 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour CCM, je viens juste de terminer un exemple,..
    Option Explicit  
    
    Sub CopieAleatoire()  
    Dim Lig As Long, LigCopy As Long, TB() As Boolean  
    Dim DerLig As Long  
    Dim WkCopy As Worksheet  
        Randomize Timer  
        Set WkCopy = Sheets("Feuil2")  
        LigCopy = 1  
        With Sheets("Feuil1")  
            DerLig = .Range("A" & Rows.Count).End(xlUp).Row  
            ReDim TB(DerLig) 'éviter de recopier plusieur fois la même ligne  
            Do While LigCopy <= 500  
                Lig = (DerLig * Rnd) + 1  
                While TB(Lig) = True  
                    Lig = (DerLig * Rnd) + 1  
                    DoEvents
                Wend  
                TB(Lig) = True  
                .Rows(Lig).Copy WkCopy.Rows(LigCopy)  
                LigCopy = LigCopy + 1  
                DoEvents  
            Loop  
        End With  
    End Sub

    Attention, si moins de 500 ligne bloque Excel, c'est pour cela que j'ai mis les DoEvents.
    Si tu est certains du nombre de ligne tu peu les enlever pour accéléré le code.
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    2
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    re
    correction d'une erreur,
    Pour copier dans la feuille extraction à partir de la colonne codebX

    ' copie des lignes selectionnées 
    For k = 1 To nbliX 
      d = T.items 
      Sheets(nfO).Range(plageO).Rows(d(k - 1)).Copy Sheets(nfX).Cells(lidebX + k - 1, codebX) 
    Next k 


    bonne suite
    1
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    un exemple
    https://www.cjoint.com/?0EhkYRFnXfX

    et comme dit lermite222 (bonjour à toi),
    tu pourras y ajouter Randomize pour réinitialiser le générateur d'aleas

    bonne suite
    0
  4. qjungers Messages postés 2 Statut Membre
     
    Merci à tous!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Voir avec la fonction Rnd() et Randomize
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    -1