Médiane sous multiples conditions

  • Initiateur de la discussion Initiateur de la discussion GhostInTheShell
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

G

GhostInTheShell

Guest
Bonjour à tous,

Excel est un excellent outil mais il garde certaines lacunes. Je travaille sur un tableau de rémunération d'où je tire plusieurs statisques. Cette année, un inventif me demande la médiane des rémunérations par convention collective, sexe, catégorie socio professionnelle (Cadre, ETAM, Ouvrier) et qualification / coefficient....
Faire une médiane simple ou avec une formule matricielle, je sais faire mais dans ce cas, je n'y arrive pas.

Quelqu'un a t'il une solution en formule excel classique ou VBA?

Merci par avance
 

Pièces jointes

Re : Médiane sous multiples conditions

Salut,

Pas trouvé mieux qu'une fonction perso VBA :
La fonction est : perso_mediane
Pour le moment elle fonctionne avec 2 conditions obligatoires
Exemple :
=perso_mediane($C$2:$C$9;1;"HOMMES";7;"CADRES")
Si en C2:C9 tu as tes salaires
en colonne 1 tu as le sex, et tu cherche la condition HOMMES
en colonne 7 tu as les profession et tu cherche CADRES

A toi de jouer si tu veux améliorer ajouter des conditions en supprimer ....

Code:
Function perso_mediane(ByVal col_sum As Range _
, ByVal col_cond1 As Integer, ByVal cond1 As String _
, ByVal col_cond2 As Integer, ByVal cond2 As String)
Dim letab() As Integer
If col_cond1 > 0 And col_cond2 > 0 Then
cpt = 0
    For Each cell In col_sum
    If Cells(cell.Row, col_cond1) = cond1 And Cells(cell.Row, col_cond2) = cond2 Then
        ReDim Preserve letab(cpt) As Integer
        letab(cpt) = cell.Value
        cpt = cpt + 1
    End If
    Next
ElseIf NOT (col_cond2 > 0) Then
    'a completer
End If
'on va chercher la mediane
perso_mediane = cherche_mediane(letab)
End Function
 
 
 
 
 
Function cherche_mediane(ByRef montab() As Integer)
    'on trie
For i = LBound(montab) To UBound(montab)
lemin = montab(i)
y_min = i
    For y = i + 1 To UBound(montab)
        If montab(y) < lemin Then
            y_min = y
            lemin = montab(y_min)
        End If
    Next y
tmp = montab(i)
montab(i) = montab(y_min)
montab(y_min) = tmp
Next i
'on prend la mediane
nb_valeur = UBound(montab) + 1
If nb_valeur = 1 Then
    cherche_mediane = montab(0)
Exit Function
End If
If nb_valeur = 2 Then
    cherche_mediane = (montab(0) + montab(1)) / 2
Exit Function
End If
'si tableau vide
If nb_valeur Mod 2 = 0 Then
    cherche_mediane = (montab((nb_valeur) / 2) + montab((nb_valeur) / 2 + 1)) / 2
Else
    cherche_mediane = montab((nb_valeur + 1) / 2)
End If
End Function

Cordialement

Suistrop
 
Dernière édition:
Re : Médiane sous multiples conditions

Bonjour, salut suistrop,

Excel est un excellent outil mais il garde certaines lacunes.

C'est exactement ce que ma femme pense de moi, mais elle n'a pas encore trouvé mieux, puisqu'elle est toujours là !
Donc je suis sur mes gardes, reste très attentif et fais comme l'espagnol qui croyait parler le français : Wait and see !
 
Re : Médiane sous multiples conditions

Bonjour,
sauf erreur de ma part,
Code:
=MEDIANE(SI((F2:F32="Hommes")*(E2:E32="ouvriers")*(G2:G32="TP");D2:D32))
te donne la médiane des salaires des ouvriers hommes référencés TP par exemple (validation matricielle).
Est-ce que tu veux ?
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour