Récupérer des entrées dans une liste pour créer des équipes de 3

Lili -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

Je voudrais récupérer 3 noms parmi une liste de 50 noms ( créée sous Excel ) pour les afficher dans un autre tableau Excel sans qu'il n'y ait redondance.
Ceci afin de créer des équipes de 3 personnes sans qu'elles n'apparaissent plusieurs fois.
Pouvez vous m'aider ?

Lili

4 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoir Lili, bonsoir le forum,

    Pas vraiment compris... On pourrait couper aléatoirement trois nom de l'onglet Feuil1 et les coller dans l'onglet Feuil2. Puis recommencer, couper 3 noms aléatoirement de Feuil1 et les coller dans l'onglet Feuil3, etc.

    C'est ça que tu voudrais ?
    0
    1. Lili31h Messages postés 4 Statut Membre
       
      Exactement et sans doublon !
      0
    2. Lili31h Messages postés 4 Statut Membre
       
      J'ai oublié de vous dire que j'essaie de le faire avec VBA (ça m'est imposé).
      Merci
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour à tous

    Un essai (sans VBA)
    https://www.cjoint.com/?3Adla1VJ0nj

    Cdlmnt
    0
    1. Lili31h Messages postés 4 Statut Membre
       
      C'est exactement ce que je veux mais il m'est imposé de le faire avec VBA.
      Et donc c'est beaucoup plus compliqué pour moi...
      Merci pour ta réponse
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    C'est un peu le même principe, un exemple

    https://www.cjoint.com/?3AdszDmeevX

    RQ. donner la taille des équipes en D1

    Cdlmnt
    0
    1. Lili31h Messages postés 4 Statut Membre
       
      Merci à toi. Tu me sors une épine du pied.
      Cordialement
      0
    2. ccm81 Messages postés 11033 Statut Membre 2 434
       
      De rien,

      Peux tu mettre le sujet à Résolu (en haut à droite de ton premier message)

      Bon après midi
      0
  4. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoir le fil, bonsoir le forum,

    Lili, en pièce jointe une autre proposition avec le code commenté ci-dessous :

    Sub Macro1()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim OS As Object 'déclare la variable OS (Onglet Source)
    Dim NL As Byte 'déclare la variable NL (Nombre de Lignes)
    Dim LI As Byte 'déclare la variable LI (LIgne)
    Dim NE As Byte 'déclare la variable NE (Numéro de l'Équipe)
    Dim NB As Byte 'déclare la variable NB (NomBre de joueurs)
    Dim OD As Object 'déclare la variable OD (Onglet Destination)
    
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    
    '****************************
    'efface les anciennes équipes
    '****************************
    
    Application.DisplayAlerts = False 'masque les messages d'Excel
    For Each O In Sheets 'boucle sur tous les onglets du classeur
        If Not O.Name = "Feuil1" Then O.Delete 'si le nom du classeur est différent de "Feuil1", efface l'onglet
    Next O 'prochain onglets de la liste
    Application.DisplayAlerts = True 'affiche les messages d'Excel
    
    '********************
    'création des équipes
    '********************
    
    Set OS = Sheets("Feuil1") 'définit l'onglet OS
    NE = 1 'initialise le numéro d'équipe NE
    NL = OS.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit le nombre de lignes éditées NL dans la colonne 1 (=A) de l'onglet OS
    Do Until NL < 4 'éxécute jusqu'à ce que NL soit inférieur à 4
        If NB = 0 Then 'condition : si le nombre NB est égal à zéro
            Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position
            ActiveSheet.Name = "Équipe " & NE 'renomme l'onglet avec le numéro de l'équipe NE
            Set OD = ActiveSheet 'définit l'onglet OD
        End If 'fin de la condition
        Randomize 'lance le générateur de nombre aléatoires
        LI = Int((NL - 1) * Rnd + 2) 'génère une nombre aléatoire LI entre 2 et DL
        'copie la cellule ligne LI, colonne 1 (=A) de l'onglet OS dans la cellule ligne NB+1, colonne 1 (=A) de l'onglet OD
        OS.Cells(LI, 1).Copy OD.Cells(NB + 1, 1)
        OS.Cells(LI, 1).Delete xlShiftUp 'supprime la cellule copiée en décalant vers le haut
        'incrémente le nombre NB, mais quand NB vaut trois alors, NB vaut zéro et NE vaut NE+1
        NB = NB + 1: If NB = 3 Then NB = 0: NE = NE + 1
        NL = NL - 1 'décrémente le nombre de lignes NL
    Loop 'boucle
    OS.Select 'sélectionne l'onglet OS
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub


    Le fichier :
    https://www.cjoint.com/c/EAdwyVqgRuA
    0
    1. ThauTheme Messages postés 1564 Statut Membre 160
       
      Il y a une erreur dans le code à la ligne 29. Il faut la remplacer par :

      Do Until NB = 0 And NL < 4 'éxécute jusqu'à ce que NB soit nul et NL soit inférieur à 4
      0