Classement données avec doublons selon leur importance

Bonjour,

Je coince sur le sujet suivant :

J'ai une banque de données dans mesure et je souhaite retourner pour chaque ville un classement des mesures selon leur importance.

Dans un premier temps je fais la petite valeur qui me classe les importances dans le bon ordre mais après je n'arrive pas à joindrel nom de la mesure à son importance surtout quand il y a des doublons.

Merci d'avance

Bonjour Aloze4,

Voyez si le fichier joint peut vous aider

=SI(D$1="";"";INDIRECT(ADRESSE(EQUIV($B4;$Mesures.$A$1:$A$52;0);D$1+1;4;1;"Mesures");1))
=SI(EST.IMPAIR(COLONNE());"";GRANDE.VALEUR($Mesures.$1:$1;SI(MOD(COLONNE();2)=0;(COLONNE()-2)/2;"")))

Bonjour,

je te propose 2 solutions différentes avec des fonctions personnalisées.

bonjour njhub

une fonction matricielle (plus performante)

=trimesure(libelles;mesures) à valider par ctrl-shift-Enter

où libelles est la plage contenant les libellés des mesures et où mesures est la plage contenant les mesures.

avant d'introduire cette instruction il faut sélectionner la plage qui recevra le résultat

Function trimesure(libelles,mesures)
'fonction matricielle renvoie un vecteur trié
'trie une ligne de mesures en ordre décroissant et leur libellé associé dans un vecteur
    Dim vs, lib, mes, i1&, i2&, t
    lib = libelles.Value
    mes = mesures.Value
    ReDim vs(1 To 1, 1 To 2 * UBound(mes, 2))
    If UBound(lib, 2) <> UBound(mes, 2) Then Exit Function
    For i1 = LBound(mes, 2) To UBound(mes, 2) - 1
        For i2 = i1 + 1 To UBound(mes, 2)
            If mes(1, i1) < mes(1, i2) Then
                t = lib(1, i1): lib(1, i1) = lib(1, i2): lib(1, i2) = t
                t = mes(1, i1): mes(1, i1) = mes(1, i2): mes(1, i2) = t
            End If
        Next i2
    Next i1
    For i1 = LBound(mes, 2) To UBound(mes, 2)
        If mes(1, i1) <> 0 Then
            vs(1, (i1 - 1) * 2 + 1) = lib(1, i1)
            vs(1, i1 * 2) = mes(1, i1)
        End If
    Next i1
    trimesure = vs
End Function

ou

une fonction classique(moins performante mais sans doute plus simple à mettre en oeuvre)

=libmes(libelles;mesures;rang;champ)

où libelles est la plage contenant les libellés des mesures

où mesures est la plage contenant les mesures

où rang est le rang de la valeur recherchée

où champ est soit "mesure" soit "libelle" pour indiqué si l'on souhaite le libellé ou la mesure correspondant à ce rang.

Function libmes(libelles, mesures, rang, Optional champ = "libelle")
'retourne le libellé ou la mesure en position rang après tri
    Dim vs, lib, mes, i1&, i2&,t
    lib = libelles.Value
    mes = mesures.Value
    If UBound(lib, 2) <> UBound(mes, 2) Then Exit Function
    For i1 = LBound(mes, 2) To UBound(mes, 2) - 1
        For i2 = i1 + 1 To UBound(mes, 2)
            If mes(1, i1) < mes(1, i2) Then
                t = lib(1, i1): lib(1, i1) = lib(1, i2): lib(1, i2) = t
                t = mes(1, i1): mes(1, i1) = mes(1, i2): mes(1, i2) = t
            End If
        Next i2
    Next i1
    If champ = "mesure" Then
        libmes = mes(1, rang)
    Else
        libmes = lib(1, rang)
    End If
End Function

Bonjour,

2 propositions à étudier.

Réalisé avec Power Query, natif Excel 2016.

Cdlt.

6aloze4.xlsx (44.05 Ko)
Rechercher des sujets similaires à "classement donnees doublons leur importance"