Classement particulier par formule ou VBA

piga25

XLDnaute Barbatruc
Bonjour,

Je souhaite effectuer un classement un peu particulier soit par formules, soit par VBA.
Sur la feuille "Choix" (tableau croisé dynamique) j'ai mis deux colonnes en A et B qui me permettent de faire une somme (Colonne B) et un classement (Colonne A). Je copie les colonnes A, B + le TCD sur la feuille "Individuel" pour faire le classement définitif (classement trié). Je n'ai trouvé que cette solution pour ajouter des colonnes avec formules a un TCD

Pour effectuer ce classement, je dois :
- faire la somme des 5 plus grandes valeur mais uniquement des CM et GP
- Y additionner les valeurs autres que CM et GP

le tout dans la colonne B (Points)

Et pour compliquer la chose, en cas d'égalité, prendre en compte celui qui a été le mieux classé, c'est à dire mettre en premier (des égalités) celui qui totalise les meilleurs places (voir sur feuille "Données"). Pour la je pense qu'il faut rajouter une colonne champ dans le TCD afin de l'utiliser dans le tableau final

Merci

Edit : Fichier anonymisé
 

Pièces jointes

  • Classement V2.xlsm
    849.8 KB · Affichages: 35
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

REbonjour

Peut être en B9 avec
Code:
SIERREUR(SI(NBVAL(E9:Z9)-NB.SI(E9:Z9;"--")<5;SOMME(E9:Z9);SOMMEPROD(GRANDE.VALEUR(SI((E$7:P$7="CM")+(E$7:P$7="GP");E9:P9;"");LIGNE(INDIRECT("1:5"))))+SOMMEPROD((E$7:P$7<>"CM")*(E$7:P$7<>"GP")*(E9:P9<>"--");(E9:P9)));"")
en matriciel, donc à valider avec Ctrl+maj tempo +entrer.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Rebonjour

Tu peux faire sans la validation en matriciel avec le nom plageCMGP= SI((E$7:p$7="CM")+(E$7:p$7="GP");E9:p9;"") et avec
Code:
SIERREUR(SI(NBVAL(E9:Z9)-NB.SI(E9:Z9;"--")<5;SOMME(E9:Z9);SOMMEPROD(GRANDE.VALEUR(plageCMGP;LIGNE(INDIRECT("1:5"))))+SOMMEPROD((E$7:P$7<>"CM")*(E$7:P$7<>"GP")*(E9:P9<>"--");(E9:P9)));"")

@ plus
 

piga25

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour,

Sur l'idée de CISCO j'ai trouvé cela :
=SI(NB.SI.ENS(E$1:Z$1;"CM";E9:Z9;"<>--")+NB.SI.ENS(E$1:Z$1;"GP";E9:Z9;"<>--")<5;SOMME(E9:Z9);SOMMEPROD(GRANDE.VALEUR(SI((E$1:Z$1="CM")+(E$1:Z$1="GP");E9:Z9;"");LIGNE(INDIRECT("1:5"))))+SOMMEPROD((E$1:Z$1<>"CM")*(E$1:Z$1<>"GP")*(E9:Z9<>"--");(E9:Z9)))

en matricielle, à valider par : ctrl+maj+entrée

Il me semble que cela répond bien à la première question.

Reste maintenant à séparer les ex-aequo en favorisant celui qui a obtenu le meilleur classement
 

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonsoir

Je suppose que tu veux faire un classement d'après la colonne B. C'est faisable sans aucune difficulté avec la fonction RANG. Par contre où lit on le classement dont tu parles pour différencier les d'exaequo ?

@ plus
 

piga25

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonsoir,

Oui c'est cela par rapports à la colonne B.
Par exemple pour le même nombre de points 34+12+8=54 et l'autre 48+0+6=54, c'est le second qui doit être en premier car c'est lui qui a eu la meilleur place.
Le classement de chaque épreuve est dans la feuille données en colonne k (classement)
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Rebonsoir

Pourquoi est-ce que tu n'as pas la même liste dans les deux feuilles "données" et "Individuel" ? Quel critère utilises tu pour sélectionner les noms qui doivent être reportés en feuille "Individuel" ? Est-ce normal que tu ais plusieurs fois le même nom dans la colonne Données!C ?

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonsoir

Cf. la méthode en colonnes AA et AB. Si on met le contenu de la colonne AA directement dans la formule RANG en colonne AB, cela ne fonctionne pas. Dommage.
En réalité, si tu as vraiment plusieurs fois le même nom dans la colonne Données!C, cette méthode ne convient pas. Par exemple, la formule en AA9 va chercher un classement Tx en colonne Données!K en face du premier "nom 143" rencontré dans la colonne Données!C, mais il y a d'autres "nom 143" plus bas. Lequel doit-on considérer ?

J'ai changé la formule en colonne Donnée!K, pour que cela donne des nombres (1, 2, 3, 8, 16, 32...) (car dans la formule en AA, j'ai besoin de nombres et pas d'un texte) et y ai mis un format spécial pour que ceux-ci s'affichent sous la forme Tx (T1, T2, T3, T8, T16, T32 et ainsi de suite).

@ plus
 

Pièces jointes

  • Classement.xlsm
    850.2 KB · Affichages: 27
  • Classement.xlsm
    850.2 KB · Affichages: 54
  • Classement.xlsm
    850.2 KB · Affichages: 37
Dernière édition:

piga25

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour,

Il s'agit de résultat d'escrime. Le tableau données comprend tous les résultats sénior d'une saison, mais avec les catégories FD, ED et SD (fleuret dame, épée dame, sabre dame). Idem pour les homme (FH, EH et SH).
Il y a quatre sortes de compétition, les championnat de zone (CH...) , les jeux olympique (JO), la coupe du monde (CM) et les grand prix (GP). Chaque escrimeur participe à plusieurs sortes de compétition ce qui lui permet d'avoir un classement mondial.
Pour cela je fais un trie dans la base de données avec le tableau croisé dynamique (choix de l'arme, catégorie, saison) puis choix du type de compétition et des lieux.
Comme je ne peux mettre de formule dans une colonne du TCD, je recopie celui-ci sous forme de tableau que je peux trier après y avoir adjoint des colonnes supplémentaires.
Malgré tout cela il peux y avoir des exaequos (total points). Le seul moyen de les différencier c'est par rapport à leur classement.
C'est pour cette raison que par exemple : Nom 1 peut avoir terminé 1er, 3èmme, non classé etc..

Si au départ j'avais mis le fichier avec les noms c'était pour une meilleur compréhension. Anonysé, il se peut que le Nom 1 figure dans plusieurs armes.
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour

Je comprend bien. Donc, il peut y avoir plusieurs fois le même nom en colonne Données!C. Par conséquent la méthode proposée dans mon dernier fichier n'est pas totalement valable. Je vais essayer de changer cela.

@ plus

P.S : De plus, il y avait une erreur dans la formule en colonne AA, il faut y mettre
-DECALER(Données!K$2;EQUIV(C9;Données!C$2:C$8363;0);)/1000 au lieu de +DECALER(Données!K$2;EQUIV(C9;Données!C$2:C$8363;0);)/1000. J'ai corrigé ma dernière pièce jointe en conséquence.
 
Dernière édition:

piga25

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour,

J'ai fait un essai qui me semble pourrait correspondre à la demande.
Voir si je ne me suis pas trompé.

J'ai juste mis une partie du classeur.

Si c'est bon, il restera à intégrer cela dans le classeur, mais là je ne sais pas comment m'y prendre. Toute idée sera la bienvenue.
 

Pièces jointes

  • essai classement.xlsx
    261.7 KB · Affichages: 26
  • essai classement.xlsx
    261.7 KB · Affichages: 32
  • essai classement.xlsx
    261.7 KB · Affichages: 36
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour à tous

@ Piga25 : La méthode précédente ne fonctionnait pas parceque la formule venait chercher le classement sur la première ligne où se trouvait le nom désiré.
En réalité, il fallait :
* soit le classement du nom désiré, mais pas sur la ligne, contenant ce nom, placée le plus haut dans le tableau, mais sur une ligne contenant un autre critère (une compétition particulière).
* soit l'ensemble des classements correspondant à ce nom.

Pourrais-tu m'expliquer à quoi correspond le tableau que tu as fait sur la droite ?

@ plus
 
Dernière édition:

piga25

XLDnaute Barbatruc
Re : Classement particulier par formule ou VBA

Bonjour,
Slt CISCO

C'est à l'ensemble des classements correspondant à ce nom.

Le tableau sur la droite correspond aux points que j'ai ajouté en fonction des résultats. Par exemple en terminant 1er, cela rajoute 0,01 points, pour un résultat de second : 0,001 points et ainsi de suite.
Comme il ni aura plus de 100 compétitions sur une saison, cela ne va pas modifier les points réel (valeur sans les décimales). par contre cela permet de départager les ex-aequos en favorisant ceux qui terminent 1er, 2ème.......

le principe pour départager les ex-eaquos, il faut privilégier en 1er les places. Les points sont différents en fonction des compets: GP:48pts; CM:32 pts; épreuve de zone (CHE, CHAF, CHAM, CHAS) 48 pts, championnats du monde CHM 80 points.
En fait la référence c'est les coupes du monde: 32 points et le reste est coefficienté.
CM 32 pts coeff 1 * 32
GP 48 pts coeff 1.5 * 32
ZOne 48 pts coeff 1.5 * 32
monde 80 pts coeff 2.5 * 32
satellite (SA) coeff 0.2 * 32

@ plus
 
Dernière édition:

Statistiques des forums

Discussions
312 373
Messages
2 087 724
Membres
103 654
dernier inscrit
kingdz2022