repartition aleatoir sans dedeoublon

  • Initiateur de la discussion Initiateur de la discussion Al_bahith
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Al_bahith

XLDnaute Nouveau
Bonjour a tous,



J'aurais besoin d'une macro pour faire la chose suivante:

j'ai une série de nombre qui se trouvent sur une ligne ds une 1er feuille " 2 ; 3 ; 5 ; 9 ; 10 ; 0 ; 11 ; 15 "


je veux les reproduire sur 6 lignes par exemple ds une 2 feuille mais on les repartissant aléatoirement chaque fois afin d'avoir la résulta comme ds la pièce jointe.
j'ai essayer avec la fonction aléa() mais le problème c'est qu'il y a toujours des dédoublons sur la même ligne (le même nombre peut se répéter plus qu'une fois sur la même ligne par-contre il faut absolument qu'il ne soit pas répéter)

cordialement
 

Pièces jointes

Dernière édition:
Re : repartition aleatoir sans dedeoublon

Bonjour Al_bahith, Rachid_0661 , Bonjour Tibo
Une proposition par macro:
VB:
Private Sub CommandButton1_Click()
Dim i&, j&, k&, L&, M&, azar&
Dim TabTemp(), T As Variant
Application.ScreenUpdating = False
M = 0
With Sheets("Feuil1")
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        ReDim TabTemp(0 To 12)
        For j = 0 To 12
            TabTemp(j) = .Cells(i, j + 1)
        Next j
        M = M + 1
        With Cells(Rows.Count, 2).End(xlUp)
            .Offset(1, -1).Value = M
            .Offset(1, 0).Resize(1, 13) = TabTemp
        End With
        For L = 1 To 5
            Randomize
            For k = LBound(TabTemp) + 1 To UBound(TabTemp)
                azar = Int(k * Rnd)
                If azar <> 0 Then
                    T = TabTemp(k)
                    TabTemp(k) = TabTemp(azar)
                    TabTemp(azar) = T
                End If
            Next k
            M = M + 1
            With Cells(Rows.Count, 2).End(xlUp)
                .Offset(1, -1).Value = M
                .Offset(1, 0).Resize(1, 13) = TabTemp
            End With
        Next L
    Next i
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

Re : repartition aleatoir sans dedeoublon

Bonjour à tous,
Une version remaniée et beaucoup plus rapide.
VB:
Private Sub CommandButton1_Click()
Dim A&, j&, k&, L&, M&, N&, Nbr&
Dim TR(), TD As Variant, T As Variant, LstCol&
Application.ScreenUpdating = False
M = 0: LstCol = 14: Nbr = 6
With Sheets("Feuil1")
    TD = .Range(.Cells(2, 1), .Cells(Rows.Count, LstCol - 1).End(xlUp)).Value
End With
ReDim TR(1 To UBound(TD, 1) * Nbr, 1 To LstCol)
For j = 1 To UBound(TD, 1)
    M = M + 1
    TR(M, 1) = M
    For L = 2 To LstCol
        TR(M, L) = TD(j, L - 1)
    Next L
    For L = 1 To Nbr - 1
        M = M + 1
        TR(M, 1) = M
        For N = 2 To LstCol
            TR(M, N) = TR(M - 1, N)
        Next N
        Randomize
        For k = 3 To LstCol
            Do
                A = Int((k * Rnd) + 1)
            Loop While A < 3
            T = TR(M, k)
            TR(M, k) = TR(M, A)
            TR(M, A) = T
        Next k
    Next L
Next j
With Sheets("Resultat")
    .Range(.Cells(2, 1), .Cells(Rows.Count, LstCol).End(xlUp).Offset(1, 0)).ClearContents
    .Cells(2, 1).Resize(M, LstCol) = TR
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
1 K
Retour