PB sur une macro recherche doublons

BRUNO28

XLDnaute Nouveau
Bonjour à tous,
Je sollicite votre aide la plus précieuse pour m'aider à résoudre mon souci sur une macro de recherche de doublons.
dans le fichier joint, sur l'onglet "RESULTATS ET CLASSEMENT", je n'arrive pas à avoir un résultat de 7 tirages successifs avec des rencontres uniques entre elles.
Si une âme charitable pouvait me trouver la solution, je serai plus que ravi.
Merci d'avance de pour vos solutions et je vous souhaite une excellente journée.
A très bientôt vous lire.
 

Pièces jointes

  • Tournoi Pétanque.xlsm
    918.5 KB · Affichages: 35

Dranreb

XLDnaute Barbatruc
Un exemple de macro possible (n'utilisez pas les '_' SVP, ils servent de séparateur dans les noms de procédures évènements entre le nom de l'objet et le nom de l'évènement) :
VB:
Sub TirageSansDoublon()
   Dim TNoms(), TRés(), M&, L&, C&, J&, TClub(0 To 0), TMarg(0 To 0)
   With Feuil2.Sort
      .SortFields.Clear
      .SortFields.Add Key:=Range("C2:C193"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .SortFields.Add Key:=Range("B2:B193"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange Range("A1:C193")
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
      End With
   TNoms = Feuil2.[B2].Resize(Feuil2.[C195].End(xlUp).Row - 1).Value
   If Tirage33OK(UBound(TNoms, 1), 3, TClub, TMarg) Then
      For M = 1 To UBound(Tirage, 1)
         ReDim TRés(1 To 30, 1 To 2)
         For L = 1 To UBound(Tirage, 2)
            For C = 1 To 6
               J = Tirage(M, L, C)
               If J > 0 Then TRés(L * 3 + (C - 1) Mod 3 - 2, (C - 1) \ 3 + 1) = TNoms(J, 1)
               Next C, L
         ThisWorkbook.Worksheets("Partie " & M).[A3:B32].Value = TRés
         Next M: End If
   End Sub
 
Dernière édition:

ferxav

XLDnaute Nouveau
Bonjour Dranreb
J'ai essayé ta macro elle fonctionne bien. Mais (parce qu'il y a toujours un mais lol) lorsqu'il y a moins de 20 joueurs il n'y as pas de tirage possible sans doublon, du coup même si c'est tres rare, cela peut arriver que nous soyons moins de 20 participants et dans ce cas il faudrait autoriser les doublons.
J'avais donc pensé faire une macro pour que si moins de 20 ma 1ere macro de tirage et + de 20 la tienne. (mais avec ta dernière version plus possible car cela m'efface mes formules dans les onglets parties.)
Ensuite ta 1ere version était super car on pouvait mettre le nombre de manche, et chez nous on envisage de faire 4 manches quand on joue le samedi après midi et 3 manches pour le dimanche matin, de la j'aurais essayer de faire ma tambouille pour créé une partie 4 etc...
Du coup pour mon faible niveau en VBA cela me parait plus simple de me basé sur ta "1ere version" et de faire ma tambouille, mais comme tu maîtrise a la perfection le VBA si jamais tu as une meilleure solution a voir
Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
L'idée qui me vient à l'esprit c'est de changer le type du tableau TDéjàPart actuellement Boolean en Byte, et d'autoriser un nombre de partenariats > 1 calculé au départ en fonction du nombre de joueurs. Voir si l'effectif pourrait même être si faible qu'il faille faire pareil avec le TDéjàRenc
 

Dranreb

XLDnaute Barbatruc
En fait je me demande même si ce n'est pas plutôt le TDéjàRenc qu'il faut traiter d'abord, en considérant qu'à chaque jeu un joueur en rencontre 3 autres mais n'est partenaire que de 2 seulement ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bon.
Comme il y a encore du boulot, je me suis décidé à garder votre classeur pour qu'on puisse se l'échanger.
J'en suis là pour le moment. Tâchez de le tester, de supprimer ce qui ne sert à rien et de mettre des noms mnémoniques partout pour qu'on puisse s'y retrouver plus facilement. Là ça ne va pas: il y a une feuille "Feuil1" représentée pas un objet Worksheet nommé Feuil2. D'habitude je renomme les objets Worksheet d'un nom mnémonique commençant par "Wsh".
 

Pièces jointes

  • ListeAléatFerxav.xlsm
    366.7 KB · Affichages: 24

ferxav

XLDnaute Nouveau
Voila j'ai fait un peu de ménage.
J'ai laissé le nom de l'onglet "Feuil2" car si je le renomme cela pose problème (et j'ai masqué tes onglets 1 contre 1, 2 contre 2.... car je ne sais pas si cela pose soucis)
Ensuite j'ai mis un onglet partie 4 pour quand on fera une 4e partie (mis dans classement). si on ne joue pas de 4e partie cela restera blanc pas de soucis.
2 problèmes se posent :
Dans le classement la colonne goalavérage reste désespérément vide (j'ai mis des formules =($E3-$F3)+($G3-$H3)+($I3-$J3)+($K3-$L3) mais cela s'efface a chaque tirage) hors c'est par la que le classement général est établi.
Ensuite pour les impairs (joueur ne jouant pas, 2 contre 1 par exemple) doivent avoir victoire 13 a 7, la solution que j'ai trouvé est de remplir le score manuellement dans classement et ensuite de remplir en couleur orange pour dire que c'est une victoire sans joué .
 

Pièces jointes

  • ListeAléatFerxav.xlsm
    227.4 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Je parlais des noms d'objets Worksheet de la rubrique Microsoft Excel Objets, pas des noms Excel des feuilles qu'ils représentent.
Sauf pour la classer, il ne faut plus toucher à la feuille Classement: c'est la macro BoutonTirage qui y met les formules.
Je n'étais pas sûr du calcul du goalavérage. Ajoutez ces instructions avant la dernière qui verse le tableau TFml des formules de renvois vers les cellules des feuilles "Partie x" :
VB:
      For M = 1 To UBound(TJoin): TJoin(M) = "RC" & M * 2 + 3 & "-RC" & M * 2 + 4: Next M
      WshClassmt.[D3].Resize(UBound(TNoms, 1)).FormulaR1C1 = "=" & Join(TJoin, "+")
Attention: WshClassemt est le nom que j'ai mis de mon coté à l'objet Worksheet initialement Feuil9 qui ne voulait rien dire, celui qui assume du coté VBA la représentation de la feuille Excel "Classement".
Rien compris à votre histoire d'impairs. Quand un joueur n'a aucun adversaire je comprends, mais s'il en a au moins un il peut jouer, non ?
Il faut essayer de mettre ce résultat, même assumé, dans les feuilles "Partie x", car les formule du classement à partir de la colonne E les repompent en temps réel au fûr et à mesure.
Si ça ne va pas, on essayera de mettre une formule spéciale dans TFml avant son versement pour ce joueur, mais ce sera plus compliqué.
 

Dranreb

XLDnaute Barbatruc
Vous voulez dire qu'avec votre présentation verticale des équipes, un dernier joueur dans la colonne de gauche qui n'a pas de vis à vis sur la même ligne dans celle à sa droite ne fait en réalité pas partie de l'équipe des joueurs au dessus de lui, et est donc seul à ne pas jouer ???
Moi je croyais qu'on faisant exceptionnellement jouer deux équipes dont la 1ère comptait un joueur de plus que l'autre, pourvu que les deux équipes aient le même nombre de boules !
Pourquoi ne fait-on pas comme ça ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Pourtant ce que vous disiez au poste #10 semblait bien n'indiquer un point gagné sans jouer que dans le cas où NbJrs Mod 6 = 1, et bien des opposition d'équipes en effectifs différents dans les cas où c'est 3 ou 5.
 

ferxav

XLDnaute Nouveau
Bonjour
Désolé mais je ne sais pas du tout ou aller pour coller

Concernant nos impairs Voici les règles :
25 joueurs : 8 équipes de 3, 1 joueur tout seul Pas de match victoire 13-7
26 joueurs : 8 équipes de 3, et les 2 autres en 1 contre 1 Pas de match victoire 13-7 pour chaque joueur
27 joueurs : 8 équipes de 3, et 3 joueurs en 2 contre 1 Pas de match victoire 13-7 pour chaque joueur
28 joueurs : 8 équipes de 3, et 2 équipes en 2 contre 2 Match
29 joueurs : 8 équipes de 3, et 3 contre 2 pour les autres Match

C'est la règle appliqué car nous jouons en 3 contre 3 (on a autorisé les 2 contre 2 et 3 contre 2 pour que les 4 ou 5 joueurs jouent au lieu de resté sans rien faire).
 

Dranreb

XLDnaute Barbatruc
Dans le module Module3 je crois (je l'ai renommé MÉditTirag chez moi), Private Sub BoutonTirage(). à la fin, à la place d'une instruction que j'avais laissé en commentaire
d'ailleurs je me suis aussi demandé si le calcul des partie gagnées ne serait pas plus correct comme ça :
VB:
      For M = 1 To UBound(TJoin): TJoin(M) = "SIGN(RC" & M * 2 + 3 & "-RC" & M * 2 + 4 & ")": Next M
      WshClassmt.[C3].Resize(UBound(TNoms, 1)).FormulaR1C1 = "=(" & Join(TJoin, "+") & "+" & UBound(TJoin) & ")/2"
Ça donne pour 3 parties en 'Classement'!C3 :
Code:
=(SIGNE($E3-$F3)+SIGNE($G3-$H3)+SIGNE($I3-$J3)+3)/2
Bon, je vais voir ce que je peux faire pour les excédents de 6 < 4. Ça signifierait quoi au juste 13-7 si ça pouvait être un score joué ?
 

Discussions similaires

Réponses
12
Affichages
293

Statistiques des forums

Discussions
312 108
Messages
2 085 371
Membres
102 876
dernier inscrit
BouteilleMan