Classement + affichage 3 valeurs

Bonjour, je n'ai pas su nommer correctement ma question.

J'ai actuellement un tableur avec des personnes, leur pays et le nombre de points qu'ils ont ramené.

J'aimerais faire un classement de cela, avec dont l'addition des points par personne et dans ce classement marquer la personne, son pays et son nombre de points ( trié par nombre de points ).

Le problème est que je bloque là-dessus depuis de longues minutes déjà.

merci d'avance pour l'aide que vous m'apporterez.

7classeur1.xlsx (9.40 Ko)

Bonjour

Problème classique en algorithmique ! Donc cela donnerait en algorithmique pure et basique :

Sub Tri()
Dim tabNoms()
Dim tabTri()
Dim ligFin
Dim cptLig, nbrTri
Dim ligNom

    ligFin = Cells(Rows.Count, 1).End(xlUp).Row
    tabNoms = Range(Cells(1, 1), Cells(ligFin, 3))
    For cptLig = 1 To UBound(tabNoms, 1)
        ligNom = TrouveNom(tabTri, tabNoms(cptLig, 1))
        If ligNom > 0 Then
            tabTri(3, ligNom) = tabTri(3, ligNom) + tabNoms(cptLig, 3)
        Else
            tabTri = InsereNom(tabTri, tabNoms, cptLig)
        End If
    Next

    tabTri = TriPoints(tabTri)

    Cells(2, 5).Resize(UBound(tabTri, 2), UBound(tabTri, 1)) = WorksheetFunction.Transpose(tabTri)

End Sub

Function TriPoints(tabBrut)
Dim iIndice, jIndice
Dim zonSwap
Dim cptCol

    For iIndice = 1 To UBound(tabBrut, 2) - 1
        For jIndice = iIndice To UBound(tabBrut, 2)
            If tabBrut(3, iIndice) < tabBrut(3, jIndice) Then
                For cptCol = 1 To 3
                    zonSwap = tabBrut(cptCol, iIndice)
                    tabBrut(cptCol, iIndice) = tabBrut(cptCol, jIndice)
                    tabBrut(cptCol, jIndice) = zonSwap
                Next
            End If
        Next
    Next

    TriPoints = tabBrut

End Function

Function InsereNom(tabTrier, tabNoms, ligAct)
Dim cptCol

    On Error GoTo errInsereNom
    ReDim Preserve tabTrier(1 To UBound(tabTrier, 1), 1 To UBound(tabTrier, 2) + 1)
    On Error GoTo 0

    For cptCol = 1 To UBound(tabNoms, 2)
        tabTrier(cptCol, UBound(tabTrier, 2)) = tabNoms(ligAct, cptCol)
    Next

    InsereNom = tabTrier

    Exit Function

errInsereNom:
    ReDim tabTrier(1 To 3, 1 To 1)
    Resume Next

End Function

Function TrouveNom(tabTrier, nomCherche)
Dim trvNom As Boolean
Dim cptLig
Dim nbrLig

    trvNom = False
    cptLig = 1
    On Error GoTo errTrouveNom
    nbrLig = UBound(tabTrier, 2)
    On Error GoTo 0

    While Not (cptLig > UBound(tabTrier, 2)) And Not trvNom
        If (tabTrier(1, cptLig) = nomCherche) Then
            trvNom = True
        Else
            cptLig = cptLig + 1
        End If
    Wend

    TrouveNom = IIf(trvNom, cptLig, 0)

    Exit Function

errTrouveNom:
    TrouveNom = 0
    On Error GoTo 0

End Function

Mais je viens de voir que tu travailles sur GoogleSheet, je sais pas si VBA fonctionne de manière identique...

PS/ Le code n'est pas commenté, mais je pense qu'il se comprend de lui même... Au besoin je peux le commenter !

Bonjour,

Une proposition à étudier.

Les données sont sous forme de tableau structuré. On crée un TCD (Tableau croisé dynamique).

On somme le nombre de points en fonction du Nom et du Pays.

On effectue ensuite un tri descendant de la somme des points !...

A te relire.

Cdlt.

3fizik.xlsx (14.78 Ko)
snip 20190519065941

Merci bien,

J'ai essayé la deuxième proposition qui fonctionne à merveille.

Savez-vous si il est possible de faire cela sans TCD et sans VBA ? Seulement avec des fonctions natives d'Excel ?

Merci

Bonjour

Oui tout a fait. C'est possible avec une table intermédiaire et pas mal de formules et cela pourrait donner cela :

explic 20190519 01

(..)

Avec les explications de mise en place :

explic 20190519 02

L'utilisation des formules nommées permet de limiter la taille des formules suivantes (et par la même occasion, d'éviter des erreurs de frappe)

explic 20190519 03

Le fait que les libellés des colonnes soient identiques (tableau intermédiaire et tableau final) permet de changer l'ordre des colonnes dans le tableau final.

explic 20190519 04 explic 20190519 05

Le tableau intermédiaire peut être masqué, ou même "expatrié" sur un autre onglet pour éviter les affichages parasites

Alors là excellent !

Merci beaucoup pour ton temps et ta patience, ça marche niquel !

Encore merci

Bonjour

De rien !

Mais j'apprécie néanmoins !

Heureux d'avoir répondu à tes prédicats de départ, et que la transcription de mes explications fonctionnent !

Au plaisir !

Bonjour

Je reviens sur mes figures pour apporter le point suivant :

Dans mes formules le tableau final (orange) est figé au 4 lignes (actuelles) du tableau intermédiaire (vert) !

Mais tu peux en appliquant le principe de formules nommées (celles du tableau bleu) faire en sorte que les formules soient auto-adaptatives ! Si tu as bien compris le principe de fonctionnement de la fonction DECALER que j'ai utilisé, cela ne devrait pas te poser de problème...

Mais n'hésite pas à revenir au cas où !!

(..)

Dans le même principe tu peux aussi obtenir le classement "pays"

explic 20190519 06

avec toujours tableau intermédiaire (vert) et final (orange)

Je te laisse adapter ?

Rechercher des sujets similaires à "classement affichage valeurs"