Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Résolu Classement de course à étape

Nplayer76

XLDnaute Nouveau
Bonjour à tous,
j'ai cherché sur internet une solution à mon problème mais je n'ai rien trouvé de probant, je m'en remets une nouvelle fois au savoir du forum.

Voilà mon problème :
J'ai un tableau de classement général où figurent les noms et nombres de points totaux de chaque participant à une course, et j'ai un tableau de résultat pour chaque étape avec les noms des participants et les points reçus.
Je souhaiterais que dans le classement général, le nombre de points total se calcule automatiquement en allant chercher dans chaque étape le nombre de points que le participant a obtenu.

J'ai essayé avec une formule du style {=SI($H$4:$H$15=C11;$I$4:$I$15)+SI($L$4:$L$15=C11;$M$4:$M$15)} mais ça ne prend en compte que si la personne est 1ère.

Est-ce que quelqu'un a une idée, via une formule ou une macro ? J'espère avoir été assez clair (pas facile à expliquer, j'ai joint un exemple).

D'avance merci
 

Pièces jointes

  • Test.xlsx
    13.7 KB · Affichages: 25

job75

XLDnaute Barbatruc
Bonsoir Nplayer76, CISCO,

Voyez le fichier joint et ces macros dans le code de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, c As Range, a, b
Application.EnableEvents = False
On Error Resume Next 'si aucune SpecialCell (aucun joueur)
Set d = CreateObject("Scripting.Dictionary")
For Each c In [H3:AB14,H17:AB28].SpecialCells(xlCellTypeConstants, 2)
  d(c.Value) = d(c.Value) + c(1, 2)
Next
a = d.items: b = d.keys
tri a, b, 0, UBound(a)
[C11].Resize(d.Count) = Application.Transpose(b)
[E11].Resize(d.Count) = Application.Transpose(a)
Range("C" & d.Count + 11 & ":E" & Rows.Count) = "" 'RAZ en dessous
Application.EnableEvents = True
End Sub

Sub tri(a, b, gauc, droi)  ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) > ref: g = g + 1: Loop
    Do While ref > a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      temp = b(g): b(g) = b(d): b(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
A+
 

Pièces jointes

  • Test(1).xlsm
    27.1 KB · Affichages: 19

job75

XLDnaute Barbatruc
Bonjour Nplayer76, CISCO,

Une solution plus sophistiquée dans ce fichier (2).

Les ex-aequo sont classés dans l'ordre alphabétique.

A+
 

Pièces jointes

  • Test(2).xlsm
    29.4 KB · Affichages: 26

Discussions similaires

Réponses
3
Affichages
822
Réponses
4
Affichages
701
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…