Problème de combobox!

Bonjour,
Voila mon petit soucis:
J'ai 2 combobox avec les mêmes valeur "ligne des noms d'équipe" dans chaque colonne se trouvent des noms d'individu faisant partie de chaque équipes.
J'ai 24 autres combo a laquelle je voudrais donc en sélectionnant mes combobox 1 & 2 retrouvais mes lascars de chaque équipe mais je sélectionnerais moi même quel joueur...
J'espère me faire comprendre dans mon exposer. :)
Merci d'avance pour votre aide
Biloute

5 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Le sujet porte sur la création d'une interface VBA avec des combobox listant les noms d'équipes et de joueurs, pour sélectionner les joueurs d'une équipe lors de rencontres de darts. Des solutions évoquées couvrent l'utilisation de noms cohérents pour les contrôles, l'affectation de noms à chaque ligne et la gestion de 24 combobox supplémentaires pour afficher scores et manches. Plusieurs réponses proposent l'approche métier: enregistrer les résultats des matchs simples et doubles et afficher les points de chaque joueur sur une feuille, avec des colonnes pts et manches gagnées. D'autres échanges peuvent inclure fichiers d'exemple et liens de partage pour tester l'implémentation, ainsi que des conseils sur les structures de modules et de contrôles afin d'éviter des erreurs d'objet introuvable.

Bobot (l’IA à votre service)
  1. Bonsoir,

    J'espère me faire comprendre dans mon exposer. :)

    ben non, il faudrait commencer par dire quel VB....
    • VBS
    • VB6
    • VB.Net
    • VBA

    et si c'est VBA, word,excel, powerpoint....
    1. Pas faut! VBA excel ;)
    2. @Utilisateur anonymeEn tout cas Merci Whismeril.
      Je n'ai pas encore cette partie.J'ai juste balancer quelques codes. Mais elles sont basic.
      C'était juste pour l'idée code de démarrage ou trouver le bon tuto.
      A plus
      Biloute
  2. Modérateur
    Bonjour,

    Un exemple avec des listbox.
    Je trouve plus simple à programmer que 48 combobox...

    Le code :
    Option Explicit
    
    Dim rngEquipes As Range
    Dim strRngEquip_1 As String
    Dim strRngEquip_2 As String
    Dim Colonne_1 As String
    Dim Colonne_2 As String
    Dim indClick_List_1 As Integer
    Dim indClick_List_2 As Integer
    
    Private Sub UserForm_Initialize()
    indClick_List_2 = 24
    Set rngEquipes = Sheets("Feuil1").Range("A1:J1")
    ComboBox1.List = Application.Transpose(rngEquipes.Value)
    ComboBox2.List = Application.Transpose(rngEquipes.Value)
    End Sub
    
    Private Sub ComboBox1_Change()
    Dim Col As Integer
    Dim rngEquip_1 As Range
    
    If ComboBox1 = "" Then Exit Sub
    Col = rngEquipes.Find(ComboBox1).Column
    Colonne_1 = Chr(Col + 64)
    With Sheets("Feuil1")
        Set rngEquip_1 = .Range(.Cells(2, Col), .Cells(25, Col))
        strRngEquip_1 = Developpe_Adresse(rngEquip_1)
        ListBox1.List = rngEquip_1.Value
    End With
    End Sub
    
    Private Sub ComboBox2_Change()
    Dim Col As Integer
    Dim rngEquip_2 As Range
    If ComboBox2 = "" Then Exit Sub
    Col = rngEquipes.Find(ComboBox2).Column
    Colonne_2 = Chr(Col + 64)
    With Sheets("Feuil1")
        Set rngEquip_2 = .Range(.Cells(2, Col), .Cells(25, Col))
        strRngEquip_2 = Developpe_Adresse(rngEquip_2)
        ListBox2.List = rngEquip_2.Value
    End With
    End Sub
    
    Private Sub ListBox1_Click()
    Dim rng As Range, strRng As String, Ligne As Long
    
        indClick_List_1 = indClick_List_1 + 1
        Me.Controls("Label" & indClick_List_1) = ListBox1.List(ListBox1.ListIndex)
        Ligne = Sheets("Feuil1").Columns(Colonne_1).Find(ListBox1.List(ListBox1.ListIndex)).Row
        strRngEquip_1 = Replace(strRngEquip_1, "$" & Colonne_1 & "$" & Ligne & ",", "")
        If strRngEquip_1 = "" Then Exit Sub
        strRng = Left(strRngEquip_1, Len(strRngEquip_1) - 1)
        ListBox1.Clear
        Set rng = Sheets("Feuil1").Range(strRng)
        Rempli_Liste ListBox1, rng
    End Sub
    
    Private Sub ListBox2_Click()
    Dim rng As Range, strRng As String, Ligne As Long
    
        indClick_List_2 = indClick_List_2 + 1
        Me.Controls("Label" & indClick_List_2) = ListBox2.List(ListBox2.ListIndex)
        Ligne = Sheets("Feuil1").Columns(Colonne_2).Find(ListBox2.List(ListBox2.ListIndex)).Row
        strRngEquip_2 = Replace(strRngEquip_2, "$" & Colonne_2 & "$" & Ligne & ",", "")
        If strRngEquip_2 = "" Then Exit Sub
        strRng = Left(strRngEquip_2, Len(strRngEquip_2) - 1)
        ListBox2.Clear
        Set rng = Sheets("Feuil1").Range(strRng)
        Rempli_Liste ListBox2, rng
    End Sub
    
    Public Function Developpe_Adresse(rng As Range) As String
    Dim Cel As Range, strTmp As String
        For Each Cel In rng
            strTmp = strTmp & "," & Cel.Address
        Next Cel
        Developpe_Adresse = Right(strTmp, Len(strTmp) - 1) & ","
    End Function
    
    Private Sub Rempli_Liste(Liste As MsForms.ListBox, rng As Range)
    Dim Cel As Range
        For Each Cel In rng
            Liste.AddItem Cel.Value
        Next Cel
    End Sub
    

    1. Salut Pijaku,
      Wouah!! J'aurais jamais penser a tout ça...
      Je vais voir si ça marche. Je te tien au jus.
      Bonne journée
      Biloute
    2. Salut Pikaju,
      Pourquoi "Label"?
      indClick_List_2 = indClick_List_2 + 1
      Me.Controls("Label" & indClick_List_2) = ListBox2.List(ListBox2.ListIndex)
      Merci pour l'info.
      Biloute
  3. Modérateur
    pourquoi label?
    parce que les noms, une fois cliqués dans la liste sont inscrits dans des labels.
    Maintenant, j'ai besoin de savoir si cette méthode te conviens. il s'agit d'un premier jet qui laisse pas mal d'erreurs et est incomplet.
    Si cela te va, je reviens demain le compléter et corriger.

    --
    1. ça s'affiche bien dans les listeBox. Mais quand je clic sur la LBX2. cà m'affiche :
      Erreur d'éxécution -2147024809(80070057) objet spécifié introuvable. La LBX1 vas bien
      J'ai tenté de voir si j'avais bien tout modifié. Mais....!?
      Biloute

      Private Sub ListBox2_Click()
      Dim rng As Range, strRng As String, Ligne As Long
      
          indClick_List_2 = indClick_List_2 + 1
          Me.Controls("Label" & indClick_List_2) = ListBox2.List(ListBox2.ListIndex)
          Ligne = Sheets("Equipe").Columns(Colonne_2).Find(ListBox2.List(ListBox2.ListIndex)).Row
          strRngEquip_2 = Replace(strRngEquip_2, "$" & Colonne_2 & "$" & Ligne & ",", "")
          If strRngEquip_2 = "" Then Exit Sub
          strRng = Left(strRngEquip_2, Len(strRngEquip_2) - 1)
          ListBox2.Clear
          Set rng = Sheets("Equipe").Range(strRng)
          Rempli_Liste ListBox2, rng
      End Sub
    2. Modérateur
      @BilouteBonjour,

      La question n'est pas là. Relis mon dernier message :
      Maintenant, j'ai besoin de savoir si cette méthode te convient.
      il s'agit d'un premier jet qui laisse pas mal d'erreurs et est incomplet.
      Si cela te va, je reviens demain le compléter et corriger.
    3. ça me vas Pikaju. No soucis for that!
      Biloute
    4. Modérateur
      @Bilouteok.
      Je reviens donc tout à l'heure avec un nouveau code, mieux organisé.

      Parmi les modifs notables :
      - un click sur un label remettra le nom du joueur dans la liste
      - tu pourras choisir la "catégorie" de joueur (gardien, attaquants,...) à compléter plutôt que de les remplir dans l'ordre
    5. @pijakuC'est pas pour du foot Pikaju. :)
      Biloute
  4. Modérateur
    Bon.
    Dis moi ce que tu en penses sincèrement :
    https://www.cjoint.com/c/FCen0U3wYKE

    Il faut :
    dans le module1 régler les constantes
    Essayer dans l'userform

    Il reste des défauts, mais l'essentiel (sauf le bouton enregistrer) est là.
    1. J'ai eu un peu de mal au début pour trouver. Mais super truc Merci Pijaku. Maintenant il me faut m'amuser a enregistrer les résultats sur une feuille pour chaque individus.
      Génial en tout cas!!
  5. Modérateur
    Le Fichier
    Les enregistrements se font feuille Matchs
    Tu peux changer les noms dans la première ligne, mais pas changer l'ordre des colonnes

    A lundi pour la suite.
    1. Bon weekend. N'abuse pas trop de la bière!! ;)
      J'espère que lundi je te ferais voir le tableau final.
      Biloute
    2. Salut Pikaju,
      Bon weekend?
      Bon! Je suis un mauvais élève. Pas réussi et je me suis perdu dans tous ces codes. :/
      Peut tu me donner les bases pour pouvoir avancer dans mon bricolage fait par toi!?
      Biloute
    3. Modérateur
      @BilouteBonjour,

      Que n'as tu pas compris?
    4. La façon de mettre les valeurs des matchs "Noms et points dans leur case respective".
      Ex: daniel a gagner et a 2 pts sur trois manches donc il a 33.33% environ. et ainsi de suite. Complexe mais possible non!?
      Biloute
    5. Modérateur
      @Biloute1- j'me suis fait une variable tableau qui reprend tous les contrôles dont tu veux sauvegarder le contenu :
      Liste_Controles_Ordonnee = Array("ComboEquipe1", "ComboEquipe2", "Score_Eq1", "Score_Eq2", "LabE1_J1", "LabE1_J2", "LabE1_J3", "LabE1_J4", "LabE1_J5", "LabE1_J6", "LabE1_J7", "LabE1_J8", "LabE2_J1", "LabE2_J2", "LabE2_J3", "LabE2_J4", "LabE2_J5", "LabE2_J6", "LabE2_J7", "LabE2_J8", "CBScoreEq1_Match1", "CBScoreEq1_Match2", "CBScoreEq1_Match3", "CBScoreEq1_Match4", "CBScoreEq1_Match5", "CBScoreEq1_Match6", "CBScoreEq1_Match7", "CBScoreEq1_Match8", "CBScoreEq2_Match1", "CBScoreEq2_Match2", "CBScoreEq2_Match3", "CBScoreEq2_Match4", "CBScoreEq2_Match5", "CBScoreEq2_Match6", "CBScoreEq2_Match7", "CBScoreEq2_Match8", "LabDoublesE1_M1", "LabDoublesE2_M1", "CBScoreEq1_MatchD1", "CBScoreEq2_MatchD1", "LabDoublesE1_M2", "LabDoublesE2_M2", "CBScoreEq1_MatchD2", "CBScoreEq2_MatchD2")

      J'ai gardé le même ordre que cet array pour les entêtes des colonnes.
      Du coup, je n'ai plus qu'à boucler sur la variable tableau pour placer les valeurs.

      2- Ex: daniel a gagner et a 2 pts sur trois manches donc il a 33.33% environ. et ainsi de suite. Complexe mais possible non!?
      2a- pas compris... Tu veux des stats sur les joueurs?
      2b- 2/3 = 66%