[Excel] Médiane à deux dimensions

Fermé
parly - 6 déc. 2011 à 10:28
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 7 déc. 2011 à 16:20
Bonjour,

La fonction mediane permet de calculer la valeur centrale d'une série (50% au dessus de la médiane, 50% au dessous).
Si j'ai un tableau avec les âges de personnes, c'est facile
Age
10
10
25
25
25
25
30

La fonction =mediane (A2:A9) donne 25, ce qui est parfait.

Mais est-ce que quelqu'un peut m'indiquer comment on peut calculer la médiane dans un tableau à deux dimensions ?
Age nb d'individus
10  2
25  4
30  1


Bien entendu, ce n'est pas pour faire des médianes sur 7 individus que je vous pose la question, mais sur des tableaux avec des milliers d'individus.

Merci de votre réponse


A voir également:

4 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
7 déc. 2011 à 10:17
Bonjour,

une proposition avec une fonction personnalisée en vba :
Function medianeMat(plage As Range) As Double
    Dim tablo, nbIndividu, nb, cpt, cpt2 As Boolean
    Dim I%, J%, K%, tmp
    tablo = plage
    ' trier tablo, à désactiver si tablo déjà trié
    For I = LBound(tablo) To UBound(tablo)
        J = I
        For K = J + 1 To UBound(tablo)
            If tablo(K, 1) <= tablo(J, 1) Then J = K
        Next K
        If I <> J Then
            tmp = tablo(J, 1): tablo(J, 1) = tablo(I, 1): tablo(I, 1) = tmp
            tmp = tablo(J, 2): tablo(J, 2) = tablo(I, 2): tablo(I, 2) = tmp
        End If
    Next I
    ' médiane
    For I% = 1 To UBound(tablo)
        nbIndividu = nbIndividu + tablo(I%, 2)
    Next I%
        While nb < nbIndividu / 2
            cpt = cpt + 1
            nb = nb + tablo(cpt, 2)
        Wend
        cpt2 = nb = nbIndividu / 2
    If nbIndividu Mod 2 Then
        ' impair
        medianeMat = tablo(cpt, 1)
    Else
        'pair
        medianeMat = IIf(cpt2, (tablo(cpt, 1) + tablo(cpt + 1, 1)) / 2, tablo(cpt, 1))
    End If
End Function


J'ai testé, ça parait correct mais contrôle bien sur plusieurs exemples car j'ai les yeux qui se croisent un peu...
En particulier tester les cas pairs et impairs, avec la médiane au milieu d'un paquet ou à cheval sur 2 paquets.
Les données peuvent être non triées, si elles le sont tu peux supprimer le tri pour gagner qcq microsecondes.
https://www.cjoint.com/?ALhknQd3I9T

eric
1