Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 !

A

Al_bahith

Guest
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 modification par un modérateur:
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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
23
Affichages
682
Réponses
34
Affichages
885
Réponses
40
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…