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
Avec le choix 3 --> 5 sets à afficher
et pour finir, avec 4 --> 7 sets à afficher
Avec mes connaissances basic en VBA, je m'y perd un peu
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)