GNT sans publicité, site mobile, fonctionnalitées exclusives...

Function VBA pour Calcul d'un âge médian

Le
Statman
Je voudrais créer une fonction me permettant de calculer la médiane de donnée
(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

Étape 1 L'idée consiste à faire la somme cumulée du nombre d'individus

Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

Étape 2 Divisée par deux la somme donc dans ce cas 65/2 = 32,5

Donc l'âge médian se situe entre 3 et 4 ans il faut donc que le programme
puisse trouver la valeur inférieur à 32,5 et supérieur à 32,5 soit 25 et 40
et aussi de trouver l'âge correspondant afin soit 3 ans et 4 ans afin
d'intéger le tout dans une formule pour faire une interpolation

Étape 3 La formule d'interpolation est : Age inférieure (3 ans) + ((((demi
somme (32,5)) - (valeur inférieur (25)))/(((valeur supérieur (40)) - (valeur
inférieur (25))))

Je voudrais donc intégrer cette méthode dans un fonction VBA
Lire les 7 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #1898109
bonjour Statman,

Function AgeMedian(NombreIndividus As Range, Age As Range) As Double
Dim arr()
Dim i As Integer, Vi As Integer, Vs As Integer, Ai As Integer, somm As Integer
For i = 1 To NombreIndividus.Count
ReDim Preserve arr(i)
somm = somm + NombreIndividus.Item(i)
arr(i) = somm
Next
For i = 1 To NombreIndividus.Count
If arr(i) > somm / 2 Then
Vs = arr(i)
Vi = arr(i - 1)
Ai = Application.Index(Age, Application.Match(Vi, NombreIndividus))
Exit For
End If
Next
AgeMedian = Ai + (((somm / 2) - Vi) / (Vs - Vi))
End Function

isabelle


Je voudrais créer une fonction me permettant de calculer la médiane de donnée
(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

Étape 1 L'idée consiste à faire la somme cumulée du nombre d'individus

Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

Étape 2 Divisée par deux la somme donc dans ce cas 65/2 = 32,5

Donc l'âge médian se situe entre 3 et 4 ans il faut donc que le programme
puisse trouver la valeur inférieur à 32,5 et supérieur à 32,5 soit 25 et 40
et aussi de trouver l'âge correspondant afin soit 3 ans et 4 ans afin
d'intéger le tout dans une formule pour faire une interpolation

Étape 3 La formule d'interpolation est : Age inférieure (3 ans) + ((((demi
somme (32,5)) - (valeur inférieur (25)))/(((valeur supérieur (40)) - (valeur
inférieur (25))))

Je voudrais donc intégrer cette méthode dans un fonction VBA


Denis
Le #1898103
Bonjour,
Function med(x As Variant, y As Variant) As Variant
Dim z() As Variant
nligne = x.Rows.Count
ReDim z(0 To nligne) As Variant
z(1) = y(1)
For i = 2 To nligne
z(i) = z(i - 1) + y(i)
Next i
Median = z(nligne) / 2
For i = 1 To nligne
If z(i) < Median Then
imin = i
End If
Next i
med = x(imin) + (Median - z(imin)) / (z(imin + 1) - z
(imin))
End Function
(pas de test)
Denis
-----Message d'origine-----
Je voudrais créer une fonction me permettant de calculer
la médiane de donnée

(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

�tape 1 L'idée consiste à faire la somme cumulée du
nombre d'individus


Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

�tape 2 Divisée par deux la somme donc dans ce cas 65/2
= 32,5


Donc l'âge médian se situe entre 3 et 4 ans il faut
donc que le programme

puisse trouver la valeur inférieur à 32,5 et supérieur
à 32,5 soit 25 et 40

et aussi de trouver l'âge correspondant afin soit 3 ans
et 4 ans afin

d'intéger le tout dans une formule pour faire une
interpolation


�tape 3 La formule d'interpolation est : Age inférieure
(3 ans) + ((((demi

somme (32,5)) - (valeur inférieur (25)))/(((valeur
supérieur (40)) - (valeur

inférieur (25))))

Je voudrais donc intégrer cette méthode dans un
fonction VBA


.



Daniel.M
Le #1898100
Hello,

' Usage : =Interpol(Ages,NbrIndividus)
Function InterPol(LesX As Range, LesY As Range) As Variant

Dim LaSommeY As Double
Dim res As Variant, Ycumul As Variant
Dim i As Long, j As Long

j = LesY.Rows.Count

ReDim Ycumul(1 To j) ' bâtir les montants cumulés

LaSommeY = 0
For i = 1 To j
Ycumul(i) = LaSommeY + LesY(i)
LaSommeY = Ycumul(i)
Next i

res = Application.Match(LaSommeY / 2, Ycumul)

If IsError(res) Then
InterPol = CVErr(xlErrNum)
Exit Function
Else
InterPol = LesX(res) + ((LaSommeY / 2 - Ycumul(res)) / _
(Ycumul(res + 1) - Ycumul(res)))
End If
Erase Ycumul

End Function

Salutations,

Daniel M.

"Statman" news:
Je voudrais créer une fonction me permettant de calculer la médiane de donnée
(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

Étape 1 L'idée consiste à faire la somme cumulée du nombre d'individus

Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

Étape 2 Divisée par deux la somme donc dans ce cas 65/2 = 32,5

Donc l'âge médian se situe entre 3 et 4 ans il faut donc que le programme
puisse trouver la valeur inférieur à 32,5 et supérieur à 32,5 soit 25 et 40
et aussi de trouver l'âge correspondant afin soit 3 ans et 4 ans afin
d'intéger le tout dans une formule pour faire une interpolation

Étape 3 La formule d'interpolation est : Age inférieure (3 ans) + ((((demi
somme (32,5)) - (valeur inférieur (25)))/(((valeur supérieur (40)) - (valeur
inférieur (25))))

Je voudrais donc intégrer cette méthode dans un fonction VBA



isabelle
Le #1898093
correction,

il faut remplacer la ligne :
Ai = Application.Index(Age, Application.Match(Vi, NombreIndividus))
par
Ai = Age.Item(i - 1)

isabelle


bonjour Statman,

Function AgeMedian(NombreIndividus As Range, Age As Range) As Double
Dim arr()
Dim i As Integer, Vi As Integer, Vs As Integer, Ai As Integer, somm As Integer
For i = 1 To NombreIndividus.Count
ReDim Preserve arr(i)
somm = somm + NombreIndividus.Item(i)
arr(i) = somm
Next
For i = 1 To NombreIndividus.Count
If arr(i) > somm / 2 Then
Vs = arr(i)
Vi = arr(i - 1)
Ai = Application.Index(Age, Application.Match(Vi, NombreIndividus))
Exit For
End If
Next
AgeMedian = Ai + (((somm / 2) - Vi) / (Vs - Vi))
End Function

isabelle


Je voudrais créer une fonction me permettant de calculer la médiane de donnée
(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

Étape 1 L'idée consiste à faire la somme cumulée du nombre d'individus

Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

Étape 2 Divisée par deux la somme donc dans ce cas 65/2 = 32,5

Donc l'âge médian se situe entre 3 et 4 ans il faut donc que le programme
puisse trouver la valeur inférieur à 32,5 et supérieur à 32,5 soit 25 et 40
et aussi de trouver l'âge correspondant afin soit 3 ans et 4 ans afin
d'intéger le tout dans une formule pour faire une interpolation

Étape 3 La formule d'interpolation est : Age inférieure (3 ans) + ((((demi
somme (32,5)) - (valeur inférieur (25)))/(((valeur supérieur (40)) - (valeur
inférieur (25))))

Je voudrais donc intégrer cette méthode dans un fonction VBA




Daniel.M
Le #1898037
Salut,

Une autre version, mais sans boucle (pour le fun):

Function InterPol2(LesX As Range, LesY As Range) As Variant

Dim ValYMed As Double
Dim r As Variant, Ycumul As Variant

r = LesY.Address(0, 0, xlA1, 0)

Ycumul = Evaluate("=MMULT(TRANSPOSE(ROW(" & r & ")^0)," & r & _
"*(ROW(" & r & ")<=TRANSPOSE(ROW(" & r & "))))")

ValYMed = Ycumul(UBound(Ycumul)) / 2

r = Application.Match(ValYMed, Ycumul) ' rech dichotomique rapide

If IsError(r) Then ' ValYMed < Plus petite valeur
InterPol2 = (ValYMed) / Ycumul(1)
Else
InterPol2 = LesX(r) + ((ValYMed - Ycumul(r)) / _
(Ycumul(r + 1) - Ycumul(r)))
End If

Erase Ycumul

End Function

Salutations,

Daniel M.


"Daniel.M" news:e0PDE$
Hello,

' Usage : =Interpol(Ages,NbrIndividus)
Function InterPol(LesX As Range, LesY As Range) As Variant

Dim LaSommeY As Double
Dim res As Variant, Ycumul As Variant
Dim i As Long, j As Long

j = LesY.Rows.Count

ReDim Ycumul(1 To j) ' bâtir les montants cumulés

LaSommeY = 0
For i = 1 To j
Ycumul(i) = LaSommeY + LesY(i)
LaSommeY = Ycumul(i)
Next i

res = Application.Match(LaSommeY / 2, Ycumul)

If IsError(res) Then
InterPol = CVErr(xlErrNum)
Exit Function
Else
InterPol = LesX(res) + ((LaSommeY / 2 - Ycumul(res)) / _
(Ycumul(res + 1) - Ycumul(res)))
End If
Erase Ycumul

End Function

Salutations,

Daniel M.

"Statman" news:
Je voudrais créer une fonction me permettant de calculer la médiane de
donnée


(dans mon cas l'age médian)

Par exemple

Age Nombre d'individus
1 5
2 10
3 10
4 15
5 20
6 5

Étape 1 L'idée consiste à faire la somme cumulée du nombre d'individus

Age Nombre d'individus
1 5
2 15
3 25
4 40
5 60
6 65

Étape 2 Divisée par deux la somme donc dans ce cas 65/2 = 32,5

Donc l'âge médian se situe entre 3 et 4 ans il faut donc que le programme
puisse trouver la valeur inférieur à 32,5 et supérieur à 32,5 soit 25 et 40
et aussi de trouver l'âge correspondant afin soit 3 ans et 4 ans afin
d'intéger le tout dans une formule pour faire une interpolation

Étape 3 La formule d'interpolation est : Age inférieure (3 ans) + ((((demi
somme (32,5)) - (valeur inférieur (25)))/(((valeur supérieur (40)) - (valeur
inférieur (25))))

Je voudrais donc intégrer cette méthode dans un fonction VBA







Publicité
Suivre les réponses
Poster une réponse
Anonyme