Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment utiliser la fonction Quartile dans une requête Access?

4 réponses
Avatar
Frank TALLET
Sur Access 2000, besoin de calculer les quartiles de résultats biologiques
dans une population. Cette fonction est disponible dans Excel, mais la
population est trop grande pour que ce soit utilisable. Msowcf.dll semble
installée.

4 réponses

Avatar
Eric
Bonjour,

Je n'ai pas trouvé comment avec MSOWCF.DLL passer le 1er argument à la
fonction QUARTILE compte tenu qu'il s'agit d'un argument défini comme
IXRangeEnum. ( Question pour un spécialiste : comment convertir un Array
en IXRangeEnum ?)

Pour d'autres fonctions qui n'utilisent pas ce type, ça donnerait:
Public Function fnCombinaison(ByVal NombreTotal As Double, ByVal
NombreChoix As Double) As Double
'référence à msowcf.dll
' Nombre de combinaisons de p éléments parmi n
Dim oFunc As Object
Set oFunc = New MSOWCFLib.OCFunc
fnCombinaison = oFunc.COMBIN(NombreTotal, NombreChoix)
Set oFunc = Nothing
End Function
Print fnCombinaison(5,3) retourne 10

Par contournement, tu peux le faire avec Automation
Function fnQuartile(UnChamp As String, UneTable As String, UnRang As
Byte) As Double
'référence à Microsoft Excel x.x Object Library
'référence à Microsoft DAO 3.x Object Library
Dim objExcel As Excel.Application
Dim rst As DAO.Recordset, strSQL As String, nb As Long
Dim i As Long
Set objExcel = CreateObject("Excel.Application")
strSQL = "Select [" & UnChamp & "] from [" & UneTable & "];"
Set rst = CurrentDb.OpenRecordset(strSQL)
rst.MoveLast: rst.MoveFirst: nb = rst.RecordCount
ReDim arrValeur(nb - 1)
While Not rst.EOF
arrValeur(i) = rst(0)
i = 1 + 1
rst.MoveNext
Wend
'1 pour le 1er quartile, 2 pour la médiane, 3 pour le 3eme quartile
fnQuartile = objExcel.Application.QUARTILE(arrValeur, UnRang)
objExcel.Quit
Erase arrValeur
Set rst = Nothing
Set objExcel = Nothing
End Function

Tu copies la fonction dans un module global et tu l'appelles dans une
requête que tu mets en regroupement puisque la fonction ne renvoie
qu'une seule valeur.
Champ1:Quartile1: fnQuartile("NomChamp";"NomTable";1)
Champ2:Médiane: fnQuartile("NomChamp";"NomTable";2)
Champ3:Quartile3: fnQuartile("NomChamp";"NomTable";3)
Opérations pour les 3 champs : Regroupement

Si tu veux limiter les enregistrements sur lesquels les quartiles sont
calculés, il te faudra rajouter une clause Where dans la définition du sql.


Sur Access 2000, besoin de calculer les quartiles de résultats biologiques
dans une population. Cette fonction est disponible dans Excel, mais la
population est trop grande pour que ce soit utilisable. Msowcf.dll semble
installée.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Frank TALLET
Merci beaucoup,
je l'essaye tout de suite

Cordialement

F. TALLET


Bonjour,

Je n'ai pas trouvé comment avec MSOWCF.DLL passer le 1er argument à la
fonction QUARTILE compte tenu qu'il s'agit d'un argument défini comme
IXRangeEnum. ( Question pour un spécialiste : comment convertir un Array
en IXRangeEnum ?)

Pour d'autres fonctions qui n'utilisent pas ce type, ça donnerait:
Public Function fnCombinaison(ByVal NombreTotal As Double, ByVal
NombreChoix As Double) As Double
'référence à msowcf.dll
' Nombre de combinaisons de p éléments parmi n
Dim oFunc As Object
Set oFunc = New MSOWCFLib.OCFunc
fnCombinaison = oFunc.COMBIN(NombreTotal, NombreChoix)
Set oFunc = Nothing
End Function
Print fnCombinaison(5,3) retourne 10

Par contournement, tu peux le faire avec Automation
Function fnQuartile(UnChamp As String, UneTable As String, UnRang As
Byte) As Double
'référence à Microsoft Excel x.x Object Library
'référence à Microsoft DAO 3.x Object Library
Dim objExcel As Excel.Application
Dim rst As DAO.Recordset, strSQL As String, nb As Long
Dim i As Long
Set objExcel = CreateObject("Excel.Application")
strSQL = "Select [" & UnChamp & "] from [" & UneTable & "];"
Set rst = CurrentDb.OpenRecordset(strSQL)
rst.MoveLast: rst.MoveFirst: nb = rst.RecordCount
ReDim arrValeur(nb - 1)
While Not rst.EOF
arrValeur(i) = rst(0)
i = 1 + 1
rst.MoveNext
Wend
'1 pour le 1er quartile, 2 pour la médiane, 3 pour le 3eme quartile
fnQuartile = objExcel.Application.QUARTILE(arrValeur, UnRang)
objExcel.Quit
Erase arrValeur
Set rst = Nothing
Set objExcel = Nothing
End Function

Tu copies la fonction dans un module global et tu l'appelles dans une
requête que tu mets en regroupement puisque la fonction ne renvoie
qu'une seule valeur.
Champ1:Quartile1: fnQuartile("NomChamp";"NomTable";1)
Champ2:Médiane: fnQuartile("NomChamp";"NomTable";2)
Champ3:Quartile3: fnQuartile("NomChamp";"NomTable";3)
Opérations pour les 3 champs : Regroupement

Si tu veux limiter les enregistrements sur lesquels les quartiles sont
calculés, il te faudra rajouter une clause Where dans la définition du sql.


Sur Access 2000, besoin de calculer les quartiles de résultats biologiques
dans une population. Cette fonction est disponible dans Excel, mais la
population est trop grande pour que ce soit utilisable. Msowcf.dll semble
installée.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Frank TALLET
Bonjour,

votre procédure fonctionne, mais j'ai du pain sur la planche pour
l'appliquer à ma population en sélectionnant automatiquement des critères
supplémentaires.
(petite erreur ? i = 1 + 1 ou i = i +1)

Merci, vous m'avez ouvert un grande porte

Cordialement

F. TALLET


Bonjour,

Je n'ai pas trouvé comment avec MSOWCF.DLL passer le 1er argument à la
fonction QUARTILE compte tenu qu'il s'agit d'un argument défini comme
IXRangeEnum. ( Question pour un spécialiste : comment convertir un Array
en IXRangeEnum ?)

Pour d'autres fonctions qui n'utilisent pas ce type, ça donnerait:
Public Function fnCombinaison(ByVal NombreTotal As Double, ByVal
NombreChoix As Double) As Double
'référence à msowcf.dll
' Nombre de combinaisons de p éléments parmi n
Dim oFunc As Object
Set oFunc = New MSOWCFLib.OCFunc
fnCombinaison = oFunc.COMBIN(NombreTotal, NombreChoix)
Set oFunc = Nothing
End Function
Print fnCombinaison(5,3) retourne 10

Par contournement, tu peux le faire avec Automation
Function fnQuartile(UnChamp As String, UneTable As String, UnRang As
Byte) As Double
'référence à Microsoft Excel x.x Object Library
'référence à Microsoft DAO 3.x Object Library
Dim objExcel As Excel.Application
Dim rst As DAO.Recordset, strSQL As String, nb As Long
Dim i As Long
Set objExcel = CreateObject("Excel.Application")
strSQL = "Select [" & UnChamp & "] from [" & UneTable & "];"
Set rst = CurrentDb.OpenRecordset(strSQL)
rst.MoveLast: rst.MoveFirst: nb = rst.RecordCount
ReDim arrValeur(nb - 1)
While Not rst.EOF
arrValeur(i) = rst(0)
i = 1 + 1
rst.MoveNext
Wend
'1 pour le 1er quartile, 2 pour la médiane, 3 pour le 3eme quartile
fnQuartile = objExcel.Application.QUARTILE(arrValeur, UnRang)
objExcel.Quit
Erase arrValeur
Set rst = Nothing
Set objExcel = Nothing
End Function

Tu copies la fonction dans un module global et tu l'appelles dans une
requête que tu mets en regroupement puisque la fonction ne renvoie
qu'une seule valeur.
Champ1:Quartile1: fnQuartile("NomChamp";"NomTable";1)
Champ2:Médiane: fnQuartile("NomChamp";"NomTable";2)
Champ3:Quartile3: fnQuartile("NomChamp";"NomTable";3)
Opérations pour les 3 champs : Regroupement

Si tu veux limiter les enregistrements sur lesquels les quartiles sont
calculés, il te faudra rajouter une clause Where dans la définition du sql.


Sur Access 2000, besoin de calculer les quartiles de résultats biologiques
dans une population. Cette fonction est disponible dans Excel, mais la
population est trop grande pour que ce soit utilisable. Msowcf.dll semble
installée.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
Bonjour,

Oui, il s'agit d'une erreur. Il fallait lire comme vous l'avez fait : i
= i+1

Pour simplifier le travail pour les critères, l'idée serait de créer une
requête sur la table faisant appel aux critères voulus puis de passer le
sql de la requête à la fonction ( à modifier donc), les résultats
retournés par celle-ci s'afficheraient dans un formulaire.

Bonjour,

votre procédure fonctionne, mais j'ai du pain sur la planche pour
l'appliquer à ma population en sélectionnant automatiquement des critères
supplémentaires.
(petite erreur ? i = 1 + 1 ou i = i +1)

Merci, vous m'avez ouvert un grande porte

Cordialement

F. TALLET




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr