Calcul handicap en fonction du résultat de chaque joueur

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Mathal
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 20 novembre 2009
Version d'Excel : 2010 fr

Message par Mathal » 20 février 2017, 04:23

Bonjour,

Je cherche à automatiser l’handicap de joueurs qui se rencontrent aux ping-pong:
A chaque victoire, le joueur commence le match suivant avec un point de moins au départ, si match nul, pas de changement, si défaite le joueur commence avec un point de plus.
J'ai commencé à incrémenter manuellement mon fichier pour voir l'évolution des handicaps en fonction des résultats des matchs et des joueurs:
Test handicap Ping-pong.xls
(27 Kio) Téléchargé 10 fois
La colonne C affiche l'handicap du joueur de la colonne B au moment de commencer le match (idem colonne E=handicap joueur colonne D).
Donc je cherche à ce que l'handicap de C cherche le précédent résultat du joueur en B, et en fonction de ce résultat mette à jour son ancien handicap.
exemple: je cherche l'handicap de Lina pour son 3e match: je dois donc retrouver l'handicap qu'elle avait pour son 2e match (-1 en E12) et le résultat de son 2e match (Nul en F12), ce qui me donne un nouvel handicap de -1 + 0 = -1
- Comment retrouver la cellule spécifique au joueur en cherchant dans les lignes ou matchs précédents ?
- Une fois qu'on a retrouvé le bon prénom dans le match précédent, que faut-il indiquer pour utiliser le N° de la ligne trouvée dans la colonne d'handicap adjacente, et ensuite lui ajouter le résultat du match correspondant pour le joueur en question ?

Je me dis que je pourrais peut-être passer par une fonction ou une base de donnée ou une variable mémoire qui aurait tous les prénoms, et une autre fonction qui dirait quoi faire en fonction du résultat ?

J'espère que j'explique à peu près clairement ma (mes) demande(s) car je ne vois pas trop comment faire...

Merci d'avance !
Mathal.
:)
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'309
Appréciations reçues : 374
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 20 février 2017, 08:18

Bonjour,

pour Joueur 1, en C2 :
=NB.SI.ENS($B$1:$B1;$B2;$F$1:$F1;"J2")+NB.SI.ENS($D$1:$D1;$B2;$F$1:$F1;"J1")-NB.SI.ENS($B$1:$B1;$B2;$F$1:$F1;"J1")-NB.SI.ENS($D$1:$D1;$B2;$F$1:$F1;"J2")
adapter pour J2
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
J
JFL
Membre impliqué
Membre impliqué
Messages : 1'335
Inscrit le : 1 avril 2011
Version d'Excel : 2010 FR, 2013 FR

Message par JFL » 20 février 2017, 13:29

Bonjour Mathal, Eric, le forum,

Pour le plaisir avec une fonction personnalisée à partir d'excel 2013.
Copie de Test handicap Ping-pong.xlsm
(18.25 Kio) Téléchargé 9 fois
Cordialement

JF
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'729
Appréciations reçues : 218
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 20 février 2017, 16:13

Bonjour le forum,
Bonjour l'équipe,

une autre façon de faire...
If Not Intersect(Target, Range("F2:F" & iRow)) Is Nothing Then
    iLig = 2 + (IIf(Target.Row Mod 8 < 2, (Int(Target.Row / 8) - 1) * 8, Int(Target.Row / 8) * 8))
    For y = 1 To 2
        sNom = Target.Offset(0, -(4 / y))
        Set rCel = Range("B" & iLig & ":D" & iLig + 7).Find(what:=sNom, lookat:=xlWhole)
        iJeu = IIf(Target.Value = "N", 0, -1)
        If iJeu = -1 Then iJeu = IIf(Val(Right(Target.Value, 1)) = y, -1, 1)
        iHandiPing = rCel.Offset(0, 1) + iJeu
        Target.Offset(0, (y * 2)) = iHandiPing
        If Target.Row < 18 Then
            Set rCel = Range("B" & iLig + 8 & ":D" & iLig + 15).Find(what:=sNom, lookat:=xlWhole)
            rCel.Offset(0, 1) = iHandiPing
        End If
    Next
End If
Pour le plaisir du code!
:D
A+
HandiPing.xlsm
(25.06 Kio) Téléchargé 9 fois
Avatar du membre
Mathal
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 20 novembre 2009
Version d'Excel : 2010 fr

Message par Mathal » 21 février 2017, 03:44

eriiic a écrit :Bonjour,

pour Joueur 1, en C2 :
=NB.SI.ENS($B$1:$B1;$B2;$F$1:$F1;"J2")+NB.SI.ENS($D$1:$D1;$B2;$F$1:$F1;"J1")-NB.SI.ENS($B$1:$B1;$B2;$F$1:$F1;"J1")-NB.SI.ENS($D$1:$D1;$B2;$F$1:$F1;"J2")
adapter pour J2
eric
Bonjour eriiic,

Merci pour ton code, mais il marche seulement si les prénoms des joueurs ne changent pas de place, or à chaque match les joueurs changent d'adversaire.
C'est pourquoi j'ai besoin de reconnaitre le prénom (la chaine de caractères) aussi, c'est ce qui complique la tâche...
Avatar du membre
Mathal
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 20 novembre 2009
Version d'Excel : 2010 fr

Message par Mathal » 21 février 2017, 04:01

JFL a écrit :Bonjour Mathal, Eric, le forum,

Pour le plaisir avec une fonction personnalisée à partir d'excel 2013.

Bonjour JFL,

Merci ça marche pas mal :)
J'ai essayé de modifier des choses dans la fonction VBA: -3 pour match gagné, +3 pour match perdu, et Nul +1 mais là je n'ai pas trouvé la ligne donc j'ai passé cette étape... ?
Ca marchait jusqu'à ce que j'essaie d'autres handicaps avec des nombres décimaux ou des calculs...
Ca n'est pas possible ?
Voici le fichier:
HandiPing_v2.xlsm
(24.55 Kio) Téléchargé 7 fois
Mathal.

curulis57 a écrit :Bonjour le forum,
Bonjour l'équipe,

une autre façon de faire...
If Not Intersect(Target, Range("F2:F" & iRow)) Is Nothing Then
    iLig = 2 + (IIf(Target.Row Mod 8 < 2, (Int(Target.Row / 8) - 1) * 8, Int(Target.Row / 8) * 8))
    For y = 1 To 2
        sNom = Target.Offset(0, -(4 / y))
        Set rCel = Range("B" & iLig & ":D" & iLig + 7).Find(what:=sNom, lookat:=xlWhole)
        iJeu = IIf(Target.Value = "N", 0, -1)
        If iJeu = -1 Then iJeu = IIf(Val(Right(Target.Value, 1)) = y, -1, 1)
        iHandiPing = rCel.Offset(0, 1) + iJeu
        Target.Offset(0, (y * 2)) = iHandiPing
        If Target.Row < 18 Then
            Set rCel = Range("B" & iLig + 8 & ":D" & iLig + 15).Find(what:=sNom, lookat:=xlWhole)
            rCel.Offset(0, 1) = iHandiPing
        End If
    Next
End If
Pour le plaisir du code!
:D
A+

Bonjour curulis57,

Merci pour ton fichier, le petit menu déroulant marche bien, mais autant j'ai à peu près compris comment fonctionnait la macro de JFL, autant là le code proposé est trop compliqué pour moi, peux-tu m'expliquer la démarche ?
Du coup j'ai essayé de modifier certaines des cellules, faire du copier/collé, etc... mais j'ai tout de suite des erreurs sur le code avec le déboggeur qui s'ouvre sur la ligne:
iJeu = IIf(Target.Value = "N", 0, -1)
et aussi
rCel.Offset(0, 1) = iHandiPing

Est-il possible de la modifier pour d'autres circonstances ou plus de joueurs ou des handicaps différents etc... ?
Voici la version que j'ai essayé de modifier:
HandiPing_v2.xlsm
(24.55 Kio) Téléchargé 7 fois
Copie de Test handicap Ping-pong_2.xlsm
(20.85 Kio) Téléchargé 10 fois
J
JFL
Membre impliqué
Membre impliqué
Messages : 1'335
Inscrit le : 1 avril 2011
Version d'Excel : 2010 FR, 2013 FR

Message par JFL » 21 février 2017, 09:28

Bonjour Mathal, le forum

Je vous livre une version améliorée avec une feuille "paramètres" pour valoriser les différents handicaps (valeur entière).

A tester !
Copie de HandiPing_v2-1.xlsm
(30.1 Kio) Téléchargé 8 fois
Cordialement

JF
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'729
Appréciations reçues : 218
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 21 février 2017, 20:10

Salut Mathal,
Salut l'équipe,

voici une version (nettement améliorable en terme d'aide à l'affichage) qui te permettra, à l'instar de celle de JFL, de paramétrer la macro sans devoir aller 'trifouiller' dedans, ce qui n'est guère le but d'une macro, d'autant que je l'ai encore raccourcie! 8)

A droite de ton tableau des matches, tu trouveras les PARAMETRES. Tu peux y changer :
- les libellés de la liste de validation (ligne orange) ;
- les valeurs de handicap (je n'ai pas encore peaufiné l'affichage des décimales).
Si tu as une formule pour calculer les handicaps, c'est là qu'il faut les mettre.
Si ces calculs devaient être dynamiques en cours de compétition, prière d'expliquer ta demande très précisément!
- le nombre de poules jouées (obligatoire) ;
- le nombre de matches par poule (obligatoire) ;

Les deux derniers paramètres sont obligatoires pour permettre à la macro de calculer qui, que , quoi, où... :wink:
Astuce : lors de la dernière poule, les nouveaux handicaps sont envoyés vers... la première poule! Côôôt!

Deux boutons au-dessus : RESET et REPLAY.
- RESET = remise à zéro des tableaux et des handicaps de départ ;
- REPLAY = remise à zéro des tableaux MAIS maintien des derniers handicaps calculés lors de la dernière poule précédente!
On peut recommencer un tour de table sur base des derniers résultats!

Il serait donc possible de créer une BDD avec les noms de tes joueurs et leur handicap en cours avec, corollaire, possibilité de les inscrire à une nouvelle compétition avec ou sans cet handicap!

Bref, il y a moyen de jouer...

:D
A+
HandiPing.xlsm
(30.31 Kio) Téléchargé 12 fois
J
JFL
Membre impliqué
Membre impliqué
Messages : 1'335
Inscrit le : 1 avril 2011
Version d'Excel : 2010 FR, 2013 FR

Message par JFL » 21 février 2017, 20:53

curulis57 a écrit : Bref, il y a moyen de jouer...
:D :+1:
Cordialement

JF
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message