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

Stat : paramètres d'équation logarithimique

10 réponses
Avatar
Blaise Cacramp
Bonjour

Je ne suis pas statiticien et j'ai donc des difficultés pour résoudre en VBA
le problème suivant.
Soit (par exemple) ces valeurs :
Format (X) Norme (Y)
12 7.500
16 6.200
20 5.740
24 5.300
28 4.930
30 4.600
32 4.275
36 3.890

Quand j'en fait un graphique et demande une courbe de tendance (log) avec
affichage de la formule,( y = -3069,6*Ln(x) + 14979 )
et cela fonctionne suffisament pour des prévisions X.
Malheureusement ce sont des manipulations que les utilisateurs ne maitrisent
pas spécialement. Je voudrais donc plus de souplesse et acquérir via VBA
les deux paramètres a et b pour y = a.Ln(x) + b

À vous lire et avec mes meilleures salutations, Blaise.

10 réponses

Avatar
Blaise Cacramp
"Blaise Cacramp" a écrit dans le message de news:

Bonjour

Je ne suis pas statiticien et j'ai donc des difficultés pour résoudre en
VBA le problème suivant.
Soit (par exemple) ces valeurs :
Format (X) Norme (Y)
12 7.500
16 6.200
20 5.740
24 5.300
28 4.930
30 4.600
32 4.275
36 3.890

Quand j'en fait un graphique et demande une courbe de tendance (log) avec
affichage de la formule,( y = -3069,6*Ln(x) + 14979 )
et cela fonctionne suffisament pour des prévisions X.
Malheureusement ce sont des manipulations que les utilisateurs ne
maitrisent pas spécialement. Je voudrais donc plus de souplesse et
acquérir via VBA les deux paramètres a et b pour y = a.Ln(x) + b

À vous lire et avec mes meilleures salutations, Blaise.



Bien entendu, le données peuvent être dans une feuille ou une bdr comme
Access
Avatar
Tatanka
Salut Blaise,

Pas besoin de VBA pour obtenir a et b.
En supposant tes X en A2:A9 et tes Y en B2:B9,
1) Sélectionne deux cellules adjacentes sur une même ligne,
2) Entre la formule =INDEX(DROITEREG(B2:B9;LN(A2:A9));{1.2})
et valide par Ctrl+Maj+Entrée.
La cellule de gauche contiendra la valeur de a et celle de droite la valeur de b.

Serge

"Blaise Cacramp" a écrit dans le message de news:
Bonjour

Je ne suis pas statiticien et j'ai donc des difficultés pour résoudre en VBA le problème suivant.
Soit (par exemple) ces valeurs :
Format (X) Norme (Y)
12 7.500
16 6.200
20 5.740
24 5.300
28 4.930
30 4.600
32 4.275
36 3.890

Quand j'en fait un graphique et demande une courbe de tendance (log) avec affichage de la formule,( y = -3069,6*Ln(x) + 14979 )
et cela fonctionne suffisament pour des prévisions X.
Malheureusement ce sont des manipulations que les utilisateurs ne maitrisent pas spécialement. Je voudrais donc plus de souplesse
et acquérir via VBA les deux paramètres a et b pour y = a.Ln(x) + b

À vous lire et avec mes meilleures salutations, Blaise.

Avatar
Tatanka
Et pour les obtenir séparément :
Pour a : =INDEX(DROITEREG(B2:B9;LN(A2:A9));1)
Pour b : =INDEX(DROITEREG(B2:B9;LN(A2:A9));2)
Les deux formules validées par Entrée.

Serge

"Tatanka" a écrit dans le message de news:
Salut Blaise,

Pas besoin de VBA pour obtenir a et b.
En supposant tes X en A2:A9 et tes Y en B2:B9,
1) Sélectionne deux cellules adjacentes sur une même ligne,
2) Entre la formule =INDEX(DROITEREG(B2:B9;LN(A2:A9));{1.2})
et valide par Ctrl+Maj+Entrée.
La cellule de gauche contiendra la valeur de a et celle de droite la valeur de b.

Serge

"Blaise Cacramp" a écrit dans le message de news:
Bonjour

Je ne suis pas statiticien et j'ai donc des difficultés pour résoudre en VBA le problème suivant.
Soit (par exemple) ces valeurs :
Format (X) Norme (Y)
12 7.500
16 6.200
20 5.740
24 5.300
28 4.930
30 4.600
32 4.275
36 3.890

Quand j'en fait un graphique et demande une courbe de tendance (log) avec affichage de la formule,( y = -3069,6*Ln(x) + 14979 )
et cela fonctionne suffisament pour des prévisions X.
Malheureusement ce sont des manipulations que les utilisateurs ne maitrisent pas spécialement. Je voudrais donc plus de
souplesse et acquérir via VBA les deux paramètres a et b pour y = a.Ln(x) + b

À vous lire et avec mes meilleures salutations, Blaise.





Avatar
Blaise Cacramp
Merci beaucoup, Tatanka, cela fonctionne super bien !
Je suis quand même preneur d'une solution en VBA dans le cas de datas dans
une table Access.

Grand merci,

Blaise


"Tatanka" a écrit dans le message de news:
%

Et pour les obtenir séparément :
Pour a : =INDEX(DROITEREG(B2:B9;LN(A2:A9));1)
Pour b : =INDEX(DROITEREG(B2:B9;LN(A2:A9));2)
Les deux formules validées par Entrée.

Serge

"Tatanka" a écrit dans le message de news:

Salut Blaise,

Pas besoin de VBA pour obtenir a et b.
En supposant tes X en A2:A9 et tes Y en B2:B9,
1) Sélectionne deux cellules adjacentes sur une même ligne,
2) Entre la formule =INDEX(DROITEREG(B2:B9;LN(A2:A9));{1.2})
et valide par Ctrl+Maj+Entrée.
La cellule de gauche contiendra la valeur de a et celle de droite la
valeur de b.

Serge

"Blaise Cacramp" a écrit dans le message de news:

Bonjour

Je ne suis pas statiticien et j'ai donc des difficultés pour résoudre en
VBA le problème suivant.
Soit (par exemple) ces valeurs :
Format (X) Norme (Y)
12 7.500
16 6.200
20 5.740
24 5.300
28 4.930
30 4.600
32 4.275
36 3.890

Quand j'en fait un graphique et demande une courbe de tendance (log)
avec affichage de la formule,( y = -3069,6*Ln(x) + 14979 )
et cela fonctionne suffisament pour des prévisions X.
Malheureusement ce sont des manipulations que les utilisateurs ne
maitrisent pas spécialement. Je voudrais donc plus de souplesse et
acquérir via VBA les deux paramètres a et b pour y = a.Ln(x) + b

À vous lire et avec mes meilleures salutations, Blaise.









Avatar
FdeCourt
Salut,

En VBA:

Sub DROITEREG()
v = Application.LinEst(Range("B2:B9"), LN(Range("A2:A9")), True,
True)
a = v(1, 1)
b = v(1, 2)
End Sub
Function LN(monRange As Range)
x = monRange
tmp = Application.Transpose(x)
For i = LBound(x) To UBound(x)
x(i, 1) = Log(tmp(i))
Next i
LN = x
End Function

Par contre, question aux experts, sous Excel 2003 comment faire un
Application.Ln avec un range ?, ca me renvoit à chaque fois une erreur
(2015)

Cordialement,

F.
Avatar
fdecourt
Salut,

Avec ce code :

Sub DROITEREG()
v = Application.LinEst(Range("B2:B9"), LN(Range("A2:A9")), True, True)
a = v(1, 1)
b = v(1, 2)
End Sub
Function LN(monRange As Range)
x = monRange
tmp = Application.Transpose(x)
For i = LBound(x) To UBound(x)
x(i, 1) = Log(tmp(i))
Next i
LN = x
End Function

Cordialement,

F.
Avatar
Blaise Cacramp
Ouais ! super ! merci !

Mais je voudrais faire la même chose dans Access sans passer par XL :
soit lire un recordset et calculer a et b pour pour une équation LOG du type
y = -3069,6*Ln(x) + 14979

Merci à tous

Blaise


"fdecourt" a écrit dans le message de
news:
Salut,

Avec ce code :

Sub DROITEREG()
v = Application.LinEst(Range("B2:B9"), LN(Range("A2:A9")), True, True)
a = v(1, 1)
b = v(1, 2)
End Sub
Function LN(monRange As Range)
x = monRange
tmp = Application.Transpose(x)
For i = LBound(x) To UBound(x)
x(i, 1) = Log(tmp(i))
Next i
LN = x
End Function

Cordialement,

F.
Avatar
FdeCourt
Salut,

Dans ce cas, tu mets le contenu de ton recordset dans un (ou deux)
tableau à 2 dimensions.

Cordialement,

F.
Avatar
Blaise Cacramp
Au temps pour moi, j'avais lu le code en diagonale.

Je n'ai pas testé (ce sera pour demain), mais je suppose que
«Application.Transpose» transpose le Range en tableau.
Mais néanmoins «Application.LinEst» reste de l'Excel qui, il me semble a
besoin d'un Range pour son 1er parametre ?

Un grand merci à toi, F., de m'accompagner sur ce sujet "statistique" que je
maîtrise pas.

Blaise

"FdeCourt" a écrit dans le message de news:

Salut,

Dans ce cas, tu mets le contenu de ton recordset dans un (ou deux)
tableau à 2 dimensions.

Cordialement,

F.
Avatar
FdeCourt
Salut,

Nop Application.transpose transformepar exemple un tableau de 2 lignes
x 10 colonnes, en tableau de 10 lignes x 2 colonnes.
Sinon LinEst fonctionne avec un range qui n'est rien d'autre qu'un
tableau à x dimension dans la formule, et qui fonctionne donc avec un
Array.
Je regarderai demain pour Access.

Cordialement,

F.