Bonsoir Nicolas
Dans la plage B4:H29 je récupère les numéros des classés pour chaque épreuve, cela évite après de devoir se balader dans les différentes feuilles. =SI(ESTNA(EQUIV($A4;'Epreuve 1'!$M$7:$M$499;0));" ";INDEX('Epreuve 1'!$D$7:$D$499;EQUIV($A4;'Epreuve 1'!$M$7:$M$499;0);1))
EQUIV retourne en fonction l'index de la place (A4) à l'intérieur d'un tableau, si la valeur n'est pas présente dans le tableau, la fonction retourne le message d'erreur #N/A, c'est l'objet de la première partie ESTNA(), quand la place à été attribué à un cavalier il faut retourner le N° de licence c'est par la fonction INDEX().
Dans la plage B36:H61, même fonctionnalité mais je récupère les noms des cavaliers.
Dans la plage B68:H96, pour le nom des chevaux.
Deuxième étape connaître sans doublon le N° des licences. C'est le rôle de la function VBA Licencié, c'est une function qui boucle (en fonction du nombre d'éléments de la plage du 1er argument) un test de présence d'une valeur par rapport à deux plages.
La function NomLicencié est sur la même base.
Ces deux Function utilise à la base des fonctions de feuilles de calcul, COUNTIF -> NB.SI et MATCH -> EQUIV
La troisième étape, consiste à déterminer le nombre de fois ou le cavalier est classé pour chaque épreuve et ce, à chaque place (1er, 2ème). Cette fonction utilise aussi les fonctions de feuilles de calcul REPT, INDEX et SUBSTITUTE -> SUBSTITUE.
Une petite particularité sur l'utilisation de la fonction INDEX dans ce cas elle retourne une plage de cellules. La longueur de la chaîne est déterminée en fonction du nombre de places. Le caractère A indique que le cavalier n' a pas été classé à cette place. Les chiffres dans la chaîne, exemple 6 (8-2) indique que le cavalier à été classé 2 fois à la même place, c'est le cas du N° 552954.
Maintenant nous avons pour chaque cavalier ses positions de classements dans les épreuves. On ne peut pas utiliser la fonction RANG qui n'utilise que des valeurs numériques, il y a une fonction équivalente pour les chaînes alphanumériques, c'est
=NB.SI(O$4:O$39;"<"&O4)+(LIGNE()/10000)
j'ai rajouter une astuce de Monique pour différencier les ex aequo.
Nous avons maintenant un classement global, il faut le retravailler pour le mettre en ordre du premier au dernier, c'est la dernière partie.
Cette formule =ENT(INDEX(P$4
$39;EQUIV(S4;M$4:M$39;0);0)+1), affiche l'ordre en supprimant la gestion des ex aequo. La mise à blanc dans la colonne R est obtenu par MFC.
Le N° de licence et le Nom sont obtenus par une formule. La function PETITE.VALEUR trie par ordre croissant une matrice de données, et retourne une valeur suivant la position dans cette matrice. EQUIV recherche cette valeur, dans la matrice non triée et retourne sa position, qui est ensuite utiliser par la fonction INDEX.
=INDEX(M$4:M$39;EQUIV(PETITE.VALEUR($P$4:$P$39;LIGNES(S$4:S4));$P$4:$P$39;0);1)
Nicolas, j'ai essayé d'être le plus explicite, mais ce n'est pas facile, et je n'excelle pas dans ce registre.
Bon dimanche
@+Jean-Marie