Programme Tournoi de tennis de table

Bonsoir le forum,

J'aurai besoin de votre aide, plus particulièrement les experts en VBA, pour mon programme de tournoi de tennis de table. Pour rappel, je suis un débutant en code !

Dans la feuille "Classement pour tableau final" j'ai créé un bouton pour le transfère de données, depuis les groupes 1 à 4. Ma commande fonctionne mais à 50%.

Problèmes à résoudre :

  • Le code ci-dessous, doit-être au début du code "Transférer…", pouvoir lire la valeur en B8, de la feuille "Infos générales" et de choisir automatiquement dans quelle cellule il doit mettre le X, entre J2:J7 de la feuille "Classement pour…", cela règle le nombre de participants au tournoi. Si le nombre de joueurs est égale à 256, pas de croix.

"Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, [J2:J7]) Is Nothing Then _

Rows(2 ^ Target.Row + 11 & ":266").Hidden = UCase$(Target) = "X"

End Sub"

  • Mon code pour le transfert des résultats, doit pouvoir lire les données d'un groupe, s'il y en a, dans le cas contraire il passera au deuxième groupe, etc…
  • Doit pouvoir identifier le nombre de joueurs (3,4,5,6,7,8,9 et 10) par groupe
  • Doit pouvoir copier les résultats dans un ordre aléatoire et on part du principe qu'il y aura que 10 joueurs maximum par groupe.
  • (groupe 1 = 4 joueurs) lit la ligne 15 (R15 à Z15) jusqu'à la ligne 24 (R24 à Z24).
  • Étant donné qu'il n'y a pas de données en ligne 20, le code s'arrête et passe au groupe 2 car moins de 10 joueurs, etc…
  • (groupe 2 = 8 joueurs)
  • (groupe 3 = 5 joueurs)
  • (groupe 4 = 3 joueurs)
  • (groupe 5 = 10 joueurs)
  • Le code doit pouvoir s'exécuter en ne tenant pas compte du nom de la feuille.
  • Nom de la feuille d'origine : Poule 3j (2), remplacer le "3" par 3,4,5,6,7,8,9 et 10 joueurs
  • Utilisateur 1, renomme la feuille en : Groupe 1, etc…
  • Utilisateur 2, renomme la feuille en : Gr. 1, etc…
  • Utilisateur 3, renomme la feuille en : Poule 1, etc… est-ce-que c'est possible ?

En résumer, avec le code je dois pouvoir transférer les résultats des groupes, en sachant que les groupes peuvent-être malléables par rapport à chaque tournois. Pour le renommage des feuilles, je pense rester sur Gr. 1, Gr. 2 etc..., c'est plus court .

Merci d'avance pour vos contributions, en espérant que ça soit réalisable 😊

En VBA, dans le module 1, il y a les codes pour chaque poules

Bonjour,

Commencez par revoir l'écriture de vos codes, utiliser l'enregistreur de macros c'est bien, mais après, il ne faut pas hésiter à nettoyer ce code notamment en se passant des "Select" à tout bout de champ, ce qui en ralentit considérablement la lecture.

Voici votre code nettoyé de la sub "Private Sub CommandButton1_Click(), faites pareil pour tous les codes du module 1

Private Sub CommandButton1_Click()
' Transférer_les_résultats Macro
    Application.ScreenUpdating = False 'évite les raffraîchissements de l'écran et augmente la vitesse d'exécution
    Sheets("Classement pour tableau final").Select
    Range("A11").FormulaR1C1 = "='Groupe 1'!R[17]C[42]"
    Range("A12").FormulaR1C1 = "='Groupe 1'!R[19]C[42]"
    Range("A13").FormulaR1C1 = "='Groupe 1'!R[21]C[42]"
    Range("A14").FormulaR1C1 = "='Groupe 1'!R[23]C[42]"
    Range("A15").FormulaR1C1 = "='Groupe 1'!R[25]C[42]"
    Range("A16").FormulaR1C1 = "='Groupe 1'!R[27]C[42]"
    Range("E11:E16,G11:H16,J11:K16,M11:M16").FormulaR1C1 = "='Groupe 1'!R[4]C[16]"
    Range("A17").FormulaR1C1 = "='Groupe 2'!R[11]C[42]"
    Range("A18").FormulaR1C1 = "='Groupe 2'!R[13]C[42]"
    Range("A19").FormulaR1C1 = "='Groupe 2'!R[15]C[42]"
    Range("A20").FormulaR1C1 = "='Groupe 2'!R[17]C[42]"
    Range("A21").FormulaR1C1 = "='Groupe 2'!R[19]C[42]"
    Range("A22").FormulaR1C1 = "='Groupe 2'!R[21]C[42]"
    Range("E17:E22,G17:H22,J17:K22,M17:M22").FormulaR1C1 = "='Groupe 2'!R[-2]C[16]"
    Range("A23").FormulaR1C1 = "='Groupe 3'!R[5]C[42]"
    Range("A24").FormulaR1C1 = "='Groupe 3'!R[7]C[42]"
    Range("A25").FormulaR1C1 = "='Groupe 3'!R[9]C[42]"
    Range("A26").FormulaR1C1 = "='Groupe 3'!R[11]C[42]"
    Range("A27").FormulaR1C1 = "='Groupe 3'!R[13]C[42]"
    Range("A28").FormulaR1C1 = "='Groupe 3'!R[15]C[42]"
    Range("E23:E28,G23:H28,J23:K28,M23:M28").FormulaR1C1 = "='Groupe 3'!R[-8]C[16]"
    Range("A29").FormulaR1C1 = "='Groupe 4'!RC[39]"
    Range("A30").FormulaR1C1 = "='Groupe 4'!R[2]C[39]"
    Range("A31").FormulaR1C1 = "='Groupe 4'!R[4]C[39]"
    Range("A32").FormulaR1C1 = "='Groupe 4'!R[6]C[39]"
    Range("A33").FormulaR1C1 = "='Groupe 4'!R[8]C[39]"
    Range("E29:E33,G29:H33,J29:K33,M29:M33").FormulaR1C1 = "='Groupe 4'!R[-14]C[13]"
End Sub

Pour le reste, peut-être que quelqu'un s'y intéressera.

Cdlt

Merci Arturo83 pour ton retour...c'est comme ça que j'apprends

Bonsoir le forum,

Après plus d'un an, mon programme tournoi de tennis de table c'est bien amélioré. Grâce à un membre du forum et son code, j'ai pu facilité la lecture du fichier, mais je souhaiterai apporter une modification au code que je ne sais pas comment faire .

Voici le code en question, pour rappel, je dois mettre manuellement le "X" dans une des cellules J2:J7

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [J2:J7]) Is Nothing Then _
Rows(2 ^ Target.Row + 11 & ":266").Hidden = UCase$(Target) = "X"
End Sub

Y-a-t il une possibilité pour faire fonctionner ce code, via une case à cocher de type formulaire qui ce trouvera sur une autre feuille, et au lieu d'avoir un "X", j'aurai à la place "VRAI" ?

Merci d'avance pour vos feedback et vous souhaites une bonne soirée.

bonjour,

votre case se trouve au sheet "Infos ..." N2 et cellule P1

Sub Choix()
     i = Sheets("Infos Générales").Range("P1").Value
     Set c = Sheets("Classement pour tableau final").Range("A11:A266")
     c.EntireRow.Hidden = True
     c.Resize(2 ^ (i + 1)).EntireRow.Hidden = False
End Sub

Bonjour le forum et BsAlv,

Merci infiniment pour ton code et le temps consacré à ma demande. C'est exactement ce que je souhaitais et sa fonctionne parfaitement!

Bonsoir le forum,

Après avoir reçu le code en VBA de BsAlv, pour le choix du nombre de participants via les cases à option, j'ai modifié son code pour qu'il me fasse la même chose mais sur les colonnes et sur plusieurs feuilles à la fois...ça bug !

Sub Sets()

m = Sheets("DP").Range("B269").Value
Set s = Sheets("Poule 3j").Range("AR:AU")
Set s = Sheets("Poule 4j").Range("AU:AX")
Set s = Sheets("Poule 5j").Range("AV:AY,BF:BI")
Set s = Sheets("Poule 6j").Range("AY:BB,BI:BL")
Set s = Sheets("Poule 7j").Range("BB:BF,BL:BO")
Set s = Sheets("Poule 8j").Range("BE:BH,BO:BR")
Set s = Sheets("Poule 9j").Range("BH:BK,BR:BU")
Set s = Sheets("Poule 10j").Range("BK:BN,BU:BX")
s.EntireColumn.Hidden = True
s.Resize(2 * (m + 0.5)).EntireColumn.Hidden = False   <-- l'erreur ce situe ici
End Sub

'Si le choix du nombres de sets joué = 2 --> 2*(1+0.5)= 3 sets --> masquer 4 colonnes --> par défaut
'Si le choix du nombres de sets joué = 3 --> 2*(2+0.5)= 5 sets --> libéer 2 colonnes
'Si le choix du nombres de sets joué = 4 --> 2*(3+0.5)= 7 sets --> libéer toutes les colonnes

La valeur rechercher pour le calcule se trouve dans la feuillle DP B269.

Le s --> représente les colonnes Sets (1 2 3 4 5 6 et 7)

Objectif, c'est de modifier le nombre de sets à jouer avant le tournoi. Qui pourra m'aguiller sur mon erreur ?

Merci d'avance

bonjour,

je n'ai aucun idée de ce qu'il doit se passer, mais je suppose qu'il manque un comma entre parenthèses.

s.EntireColumn.Hidden = True

s.Resize(,2 * (m + 0.5)).EntireColumn.Hidden = False

Bonjour BsAlv,

Ton code modifié, doit me permettre de cacher ou d'afficher les colonnes dans les feuilles (Poule 3j, Poule 4j, Poule 5j, etc), en fonction du choix de départ (nombre de sets à jouer...2, 3 ou 4) depuis la feuille infos générales.

Exemple pour le choix 2 (par défaut ) --> trois sets à afficher

capture d ecran 2022 11 14 124658 capture d ecran 2022 11 14 124849

Avec le choix 3 --> 5 sets à afficher

capture d ecran 2022 11 14 124658 2 capture d ecran 2022 11 14 125012

et pour finir, avec 4 --> 7 sets à afficher

capture d ecran 2022 11 14 125208

Avec mes connaissances basic en VBA, je m'y perd un peu . J'ai cherché partout dans le code, l'erreur en question...pas d'espace en trop ni faute de frappe. Je pense plutôt aux variables ou aux arguments ? Merci d'avance pour votre temps et je vais continuer à chercher des réponses sur le net.

bonjour,

un boucle pour ces feuilles

Sub Sets()
     m = Sheets("DP").Range("B269").Value
     For i = 3 To 10     'boucles ces feuilles
          Select Case i
               Case 3: Set s = Sheets("Poule 3j").Range("AO1")
               Case 4: Set s = Sheets("Poule 4j").Range("AR1")
               Case 5: Set s = Sheets("Poule 5j").Range("AS1,BC1")
               Case 6: Set s = Sheets("Poule 6j").Range("AV1,BF1")
               Case 7: Set s = Sheets("Poule 7j").Range("AY1,BI1")
               Case 8: Set s = Sheets("Poule 8j").Range("BB1,BL1")
               Case 9: Set s = Sheets("Poule 9j").Range("BE1,BO1")
               Case 10: Set s = Sheets("Poule 10j").Range("BH1,BR1")
          End Select
          For Each c In s.Cells     'boucle les cellules
               c.Resize(, 7).EntireColumn.Hidden = True     'cacher 7 colonnes
               c.Resize(, 2 * (m + 0.5)).EntireColumn.Hidden = False     'montrer 3, 5 ou 7 colonnes
          Next
     Next
End Sub

Hello BsAlv, hello le forum,

Merci pour ton code, ça fonctionne super bien.

Question; dans le code les "Case" ce sont des variables pour y stocker des données ou ça n'a rien avoir ?

Merci encore pour ton aide .

Bonne fin de journée à tous

bonjour,

ces "Case" se référent toujours au "Select Case ...", dans ce cas, c'est i, donc, le premier boucle i=3 et la macro prend la ligne "Case 3", etc

lien : https://www.excel-pratique.com/fr/vba/conditions (presque à la fin)

Rechercher des sujets similaires à "programme tournoi tennis table"