XL 2021 Rotation joueurs tarot

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cganimateur

XLDnaute Nouveau
Bonjour,

Si j'avais des cheveux je me les arracherais, voilà plus de deux semaines que j'essaie d'automatiser la rotation des joueurs pour un concours de tarot. Mais j'ai essayé des tas de trucs, de formules mais rien ne fonctionne !
En gris, les noms des joueurs après rotation (là je le fais manuellement)Je vous joins un mini fichier en espérant que l'un de vous puisse m'aider.
Bonne journée à tous.
 

Pièces jointes

Solution
Oui, j'ai fait NORD: 0, SUD: +1, EST: -1, OUEST: +2 que j'avais retenu de je ne sais où …
Je vais corriger en NORD: 0, SUD: +1, EST: +2, OUEST: -2, comme c'était indiqué en fait sur votre premier fichier. Mais attention: EST et OUEST se décaleront alors de 4 tables l'un par rapport à l'autre, de sorte que si le nombre de tables est un multiple de 4 même relativement grand, il vont se retrouver ensemble assez souvent sur assez peu de tables …
Mais bon dans ce cas ce sera le tirage par poules qui trouvera toujours une autre solution.
Re à tous, 🙂

Pour le fun, une version améliorée dans laquelle le décalage est exprimé en nombre de positions, ce qui conduit au même résultat.
Pour comprendre, d’un point de vue visuel, on peut imaginer les tables de 4 alignées en longueur, les joueurs placés côte à côte plutôt que disposés en cercle.
À chaque tour, le deuxième joueur de chaque table se décale de 4 positions, le troisième de 8 et le quatrième de 12.
Lorsqu’on atteint l’extrémité de la rangée, on revient simplement au début de celle-ci.

Dans le fichier : 12 tables soit 48 joueurs et 20 tours

VB:
Option Explicit

Sub DeplacementTableV2()
    Dim derLig As Long, i As Long, idx As Long, col As Long
    Dim Arr(), b(), sortieRot(), debut, decal, d As Long

    With Sheets("Feuil1")
        debut = Array(2, 3, 4)
        decal = Array(4, 8, 12) 'décalage en nombre de places
        derLig = .Cells(Rows.Count, "B").End(xlUp).Row
       
        For col = 3 To 21 ' 20 tours
            ' Charger la colonne précédente
            Arr = .Range(.Cells(2, col - 1), .Cells(derLig, col - 1)).Value

            ' Construire le tableau en base 0
            ReDim b(0 To UBound(Arr, 1) - 1)
            For i = 1 To UBound(Arr, 1)
                b(i - 1) = Arr(i, 1)
            Next i

            ' Appliquer les rotations
            For idx = 0 To UBound(decal)
                d = debut(idx)
                sortieRot = shiftN(b, decal(idx))
                For i = d To UBound(Arr, 1) Step 4
                    Arr(i, 1) = sortieRot(i - 1)
                Next i
            Next idx

            ' Écrire dans la colonne courante
            .Range(.Cells(2, col), .Cells(derLig, col)).Value = Arr
        Next col
    End With
End Sub

Function shiftN(Arr, ByVal n As Integer) 'mapomme
' rotation circulaire
Dim j&, k&, q&
   ReDim r(LBound(Arr) To UBound(Arr)): n = -n: q = (UBound(Arr) - LBound(Arr) + 1): n = n Mod q
   For j = LBound(Arr) To UBound(Arr): k = IIf(n >= 0, (j + n) Mod q, (q + j + n) Mod q): r(j) = Arr(k): Next j
   shiftN = r
End Function

Edit : Pour plus de lisibilité, j'ai mis des nombres, remplace-les par tes noms.
klin89
 

Pièces jointes

Dernière édition:
Re à tous, 🙂

Pour le fun, une version améliorée dans laquelle le décalage est exprimé en nombre de positions, ce qui conduit au même résultat.
Pour comprendre, d’un point de vue visuel, on peut imaginer les tables de 4 alignées en longueur, les joueurs placés côte à côte plutôt que disposés en cercle.
À chaque tour, le deuxième joueur de chaque table se décale de 4 positions, le troisième de 8 et le quatrième de 12.
Lorsqu’on atteint l’extrémité de la rangée, on revient simplement au début de celle-ci.

Dans le fichier : 12 tables soit 48 joueurs et 20 tours

VB:
Option Explicit

Sub DeplacementTableV2()
    Dim derLig As Long, i As Long, idx As Long, col As Long
    Dim Arr(), b(), sortieRot(), debut, decal, d As Long

    With Sheets("Feuil1")
        debut = Array(2, 3, 4)
        decal = Array(4, 8, 12) 'décalage en nombre de places
        derLig = .Cells(Rows.Count, "B").End(xlUp).Row
      
        For col = 3 To 21 ' 20 tours
            ' Charger la colonne précédente
            Arr = .Range(.Cells(2, col - 1), .Cells(derLig, col - 1)).Value

            ' Construire le tableau en base 0
            ReDim b(0 To UBound(Arr, 1) - 1)
            For i = 1 To UBound(Arr, 1)
                b(i - 1) = Arr(i, 1)
            Next i

            ' Appliquer les rotations
            For idx = 0 To UBound(decal)
                d = debut(idx)
                sortieRot = shiftN(b, decal(idx))
                For i = d To UBound(Arr, 1) Step 4
                    Arr(i, 1) = sortieRot(i - 1)
                Next i
            Next idx

            ' Écrire dans la colonne courante
            .Range(.Cells(2, col), .Cells(derLig, col)).Value = Arr
        Next col
    End With
End Sub

Function shiftN(Arr, ByVal n As Integer) 'mapomme
' rotation circulaire
Dim j&, k&, q&
   ReDim r(LBound(Arr) To UBound(Arr)): n = -n: q = (UBound(Arr) - LBound(Arr) + 1): n = n Mod q
   For j = LBound(Arr) To UBound(Arr): k = IIf(n >= 0, (j + n) Mod q, (q + j + n) Mod q): r(j) = Arr(k): Next j
   shiftN = r
End Function

Edit : Pour plus de lisibilité, j'ai mis des nombres, remplace-les par tes noms.
klin89
Hé ! c'est pas mal !
 
Hé ! c'est pas mal !
Bonjour !
J'ai modifié la rotation du joueur 4 qui n'était pas bonne (le joueur recule de deux tables). Par contre j'insere des colonnes "points" entre chaque "tour" mais je ne vois pas quoi changer pour décaler d'une colonne à chaque fois pour ne pas avoir de noms dans les colonnes "points". Il me faudra aussi ajouter des colonnes "positions" ce que je devrais réussir à faire si vous m'indiquer quoi changer pour le début de mon commentaire.
Bonne journée.
 

Pièces jointes

Re

Modifiez la boucle comme ceci :
VB:
For col = 4 To 12 Step 2 ' 6 tours
            ' Charger la colonne précédente
            Arr = .Range(.Cells(2, col - 2), .Cells(derLig, col - 2)).Value
klin89
Merci klin 89 ! Je pensais réussir à ajouter d'autres colonnes (positions) en augmentant la valeur de la ligne que vous avez désignez mais je ne suis pas assez doué. Mais j'ai quand même réussi à ajouter mes scores !
 
Bonjour,

Quand on a pas le logiciel de la FF de Tarot, pas évident de gérer un tournoi, je me tairais mais certains allergiques à l'informatique , le font encore de manière manuelle.

Je mets en partage en une application sans VBA qui gère de 3 à 30 Tables pour 4 positions maximum(un MAJ de la matrice pourrait gérer plus de tables de de positions) selon les mouvements HOWELL de la fédé que nous utilisons dans 2 assos non affilées de mon département.

Elle gère la 4eme positon (ou table) soit en serpentin soit en normal. Le serpentin on classe les joueurs après 3 positions, les premiers se rencontrent et ainsi de suite.
Elle gère aussi 3 tables de 3 joueurs. il suffit juste de pas mettre de Nord au(x) table(s) de 3 choisie(s).

Dans ton exemple 4 tables c'est un cas spécifique, il n'y a que le 1 nord qui ne bouge pas. (voir Feuille REF..)

Dans un premier temps, il faudra renseigner les noms de joueurs dans la feuille Entrants. ensuite on fixe leur position de départ.
une fois la partie finie Table1 (T1 dans le fichier ) on met le score de chaque joueur .

Pour t'aider j'ai rentré la liste de tes joueurs (en pratique on saisit nom et prénom dans 2 colonnes distinctes) et fixer comme dans ton fichier leur position de départ.

En MP ou sur ce fil n'hésitez pas à me poser des questions sur l'utilisation du fichier.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
482
  • Question Question
Microsoft 365 Excel et Insee
Réponses
6
Affichages
708
Retour