Bonsoir à tous,

Je cherche à déterminer la médiane sur une de mes tables avec pour subtilité de calculer cette médiane sur un champ de regroupement. Avec l'exemple ci-dessous, je souhaite pour chaque valeur du champ GP déterminer sa médiane.

GP SF CIR Med
A 2 AZ 4,5
A 5 AI 4,5
A 3 AJ 4,5
A 1 AA 4,5
B 4 BB 5
C 10 CA 11,5
B 9 BX 5
B 5 BN 5
C 13 CF 11,5
C 12 CX 11,5
C 11 CR 11,5

Bien évidemment, j'ai écumé le forum et j'ai trouvé des solutions pour déterminer la médiane sur l'ensemble de ma table sans regroupement mais bon je n'ai pas envie de créer X tables et y appliquer la fonction.

J'ai également trouvé ceci. Il s'agit d'un code qui selon l'historique de la discussion devrait fonctionner pour déterminer cette médiane avec un regroupement malheureusement chez moi rien y fait.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 Public Function fMediane(strTable As String, strField As String, Optional Arg_Champ_Regroupement As String, Optional Arg_Valeur_Regroupement) As Variant
 
Dim oDBS As DAO.Database
Dim oRST As DAO.Recordset
Dim blnEven As Boolean
Dim vntMedian As Variant
 
  Set oDBS = CurrentDb()
    If IsMissing(Arg_Regroupement) Then
    SQL = "SELECT " & strTable & ".* FROM " & strTable & " ORDER BY " & strTable & "." & strField & ";"
  Else
    SQL = "SELECT " & strTable & ".* FROM " & strTable & " WHERE " & strTable & ".[" & Arg_Champ_Regroupement & "]=" & Arg_Valeur_Regroupement & " ORDER BY " & strTable & "." & strField & ";"
 
  End If
 
  Set oRST = oDBS.OpenRecordset(SQL, dbOpenDynaset)
 
 
  If oRST.EOF = False Then
     oRST.MoveLast
     'Y a-t'il un nombre pair d'enreistrements ?
     blnEven = (oRST.RecordCount Mod 2 = 0)
     'Classer en décroissant si on a un nombre pair
     oRST.PercentPosition = 50
     vntMedian = oRST.Fields(strField)
     If blnEven Then
         oRST.MoveNext
         'faire la moyenne entre cet enregistrement et le précédent
         vntMedian = (vntMedian + oRST.Fields(strField)) / 2
     End If
  End If
 
  fMediane = vntMedian
  oRST.Close
  Set oRST = Nothing
  Set oDBS = Nothing
 
End Function

Je ne comprends pas à quoi correspond ce "Arg_Valeur_Regroupement" s'agit-il de mon champ GP des valeurs du champ GP?

Pouvez-vous me venir en aide ?

Merci d'avance,