Aide VBA Excel : Gestion tournoi / championnat / match simpl

Bonjour,

je suis débutant en VBA et j'ai suivi beaucoup de tutoriels dont ceux de ce site. Aujourd'hui je me lance dans la création d'un fichier qui servira à trois choses. Je suis organisateur de tournois Fifa et je souhaiterais pouvoir gérer ma base de donnée via Excel.

Mon fichier doit pouvoir :

  • Ajouter des joueurs et des équipes sélectionnables (Ok dans mon fichier)
  • Sélectionner le type de match (simple - championnat - tournoi ) (OK dans mon fichier)
  • Afficher un écran pour entrer le score du match (Joueur1 - Equipe - Score - Equipe - Joueur 2)
  • répertorié l'ensemble des matchs jouées et les statistiques de chaque joueurs

Après il y a évidemment des cas spécifiques à la gestion du tournoi et du championnat :

TOURNOI :

  • sélection du nombre de participants
  • tirage au sort des matchs
  • Affichage du tableau

CHAMPIONNAT :

  • Sélection du nombre de participant
  • Tirage au sort des journée
  • Affichage du classement

Alors je ne demande pas à ce que vous fassiez le fichier pour moi car je ne demande qu'à apprendre. En revanche je souhaite être accompagné dans l'élaboration de ce fichier pour savoir si je fais certaines chose de manière illogique. Donc par avance merci.

--------------------------------------------------------------------------------------------------------------------------------------------------------

Edition 1 : 02/05/2014 - 17h06 Résolu par h2so4

Edition 2 : 02/05/2014 - 18h46 : Résolu par h2so4

Edition 3 : 03/05/2014 - 14h05: Comparaison entre deux tableaux généré par VBA

J'ai avancé sur le rapatriement des statistiques liées aux matchs simple. De plus j'ai allégé (il me semble) mon code via un module et quelques variable publiques.

Désormais Mon userform_matchs permet de rentrer le score d'une rencontre et alimente les cellules D à L de la feuille database (Joueur 1, Equipe1, résultat, score1, score2, Résultat2, Equipe2, Joueur2, Date).

Je créer deux tableaux BDD() et Tstats() en vba.

BDD() Permet de répertorier tous les joueurs et lui donne en (x,0) et en (x,1) lui associe l'ensemble des équipes présente dans la colonne de B de la feuille Database.

Tstats() reprend toute les données de matchs des cellules D à L.

Désormais je veux compter le nombre de victoire dans Tstats ( x , 3) et l'attribué au couple Joueur/equipe dans Bdd( x , 3).

Comment faire ?

Maj : http://cjoint.com/14mi/DEdoo7kR68F_fifa_14.xlsm

Bonjour,

pour ta première entrée dans les tableaux tu as oublié de préciser la feuille de même pour déterminer la dernière ligne utile des tableaux. j'ai également modifié ta logique en faisant d'abord le chargement complet de tablo avant de faire le tri.

Private Sub UserForm_Activate()
    'Alimenter la listBox_Joueur avec les noms dans la feuille Database  colonne A sans doublon et par ordre alphabétique
    Dim c As Range
    Dim tablo()
    Dim i As Integer, j As Integer
    Dim temp As String
    Dim present As Boolean

    ReDim tablo(1 To 1)
    tablo(1) = Sheets("Database").Cells(1, 1)
    For Each c In Sheets("Database").Range("A1:a" &  Sheets("Database").Range("a65536").End(xlUp).Row)

        present = False
        For i = 1 To UBound(tablo)
            If tablo(i) = c Then present = True
        Next i
        If Not present Then
            ReDim Preserve tablo(1 To UBound(tablo) + 1)
            tablo(UBound(tablo)) = c
        End If
        Next c
        For i = 1 To UBound(tablo)
            For j = 1 To UBound(tablo)
                If tablo(i) < tablo(j) Then
                    temp = tablo(i)
                    tablo(i) = tablo(j)
                    tablo(j) = temp
                End If
            Next j
        Next i

    ListBox_Joueur.List = tablo
End Sub
Private Sub UserForm_Initialize()
    'Alimenter la listBox_Equipe avec les noms dans la feuille Database  colonne B sans doublon et par ordre alphabétique
    Dim c As Range
    Dim tablo()
    Dim i As Integer, j As Integer
    Dim temp As String
    Dim present As Boolean

    ReDim tablo(1 To 1)
    tablo(1) = Sheets("Database").Cells(1, 2)
    For Each c In Sheets("Database").Range("b1:b" &  Sheets("Database").Range("b65536").End(xlUp).Row)

        present = False
        For i = 1 To UBound(tablo)
            If tablo(i) = c Then present = True
        Next i
        If Not present Then
            ReDim Preserve tablo(1 To UBound(tablo) + 1)
            tablo(UBound(tablo)) = c
        End If
        Next c
        For i = 1 To UBound(tablo)
            For j = 1 To UBound(tablo)
                If tablo(i) < tablo(j) Then
                    temp = tablo(i)
                    tablo(i) = tablo(j)
                    tablo(j) = temp
                End If
            Next j
        Next i

    ListBox_Equipe.List = tablo
End Sub

edit : correction pour la détection des dernières lignes

Merci beaucoup.

h2so4 a écrit :

Bonjour,

pour ta première entrée dans les tableaux tu as oublié de préciser la feuille de même pour déterminer la dernière ligne utile des tableaux. j'ai également modifié ta logique en faisant d'abord le chargement complet de tablo avant de faire le tri.

code

J'ai éditer mon 1er post avec une nouvelle question.

Bonsoir,

pour pouvoir utiliser BDD dans les différents modules et codes de page tu doit définir cette variable comme PUBLIC.

public BDD as variant

sub machin_chose

end sub

etc ...

h2so4 a écrit :

Bonsoir,

pour pouvoir utiliser BDD dans les différents modules et codes de page tu doit définir cette variable comme PUBLIC.

public BDD as variant

sub machin_chose

end sub

etc ...

OK mais disons que je veux que ce soit la variable "tablo ()" de ma précédente requête qui soit reprise dans un autre userform je fait comment ?

bonsoir

public tablo()

dans un module et en dehors de tout sub ou function

Merci j'ai un peu galéré à saisir le truc mais désormais mon code est un peu plus léger.

1er post édité avec une nouvelle problématique !

Par avance merci.

C'est bon j'ai résolu le problème.

Nouveau problème

Dans mon userform qui sert à initialiser les paramètres du mode championnat, l'utilisateur clic sur les joueurs de la listbox1 pour les envoyer dans la listbox2 qui détermine les participant. Jusqu'ici pas de problème. Or si l'utilisateur a cliqué sur un joueur par erreur je souhaite lui laisser le choix de pouvoir le retirer. Mon code est le suivant :

Private Sub ListBox_choix_Click()
   Dim x As String
   x = ListBox_choix.Value
   ListBox_Joueur.AddItem x
End Sub

Private Sub ListBox_Joueur_Click()
    If ListBox_Joueur.ListIndex < 0 Then Exit Sub 'Aucun item de sélectionné -> fin du traitement
    ListBox_Joueur.RemoveItem (ListBox_Joueur.ListIndex)
End Sub

Problème : Quand je clic sur un nom une erreur apparaît. Serait-il possible de m'aider ?

Bonjour,

je crois que tu ne peux pas utiliser l'événement click sur la listbox pour faire une suppression d'un élément de la listbox.

tu dois passer par une sélection de l'item à transférer puis faire une validation via un bouton par exemple.

classiquement on utilise ce genre de boutons pour faire les transferts entre 2 listboxes.

> ajout d'un item

< suppression d'un item

>> ajout de tous les items

<< suppression de tous les items

Merci pour l'info j'avance sur mon fichier je reviendrais au new pour le partager quand il sera terminer ou si j'ai d'autre souci.

Rechercher des sujets similaires à "aide vba gestion tournoi championnat match simpl"