Extraire les constantes d'une équation de tendance puissance en VBA

Bonjour,

Après pas mal de recherches, je n'ai pas trouvé de réponses à mes questions.

A partir d'un tableau Excel, je voudrais pouvoir extraire les valeurs de a et b de l'équation de la courbe de tendance puissance y=ax^b. J'ai déjà trouvé les formules pour pouvoir les calculer directement sur la feuille Excel.

Pour a: =EXP(INDEX(DROITEREG(LN(donnéesY);LN(donnéesX));1;2))

Et pour b: =PENTE(LN(données_Y);LN(données_X))

Cependant je n'arrive pas à traduire ces formules en langage VBA afin de les extraire automatiquement et de les affecter à une cellule.

Cordialement,

Merci d'avance

Bonjour Abdel_S, bienvenue sur le forum !

En VBA essayes de mettres ces formules dans une cellule:

Exp(Application.WorksheetFunction.Index(Application.WorksheetFunction.LinEst(Application.WorksheetFunction.Ln(donnéesY), Application.WorksheetFunction.Ln(donnéesX)), 1, 2))
Application.WorksheetFunction.Slope(Application.WorksheetFunction.Ln(données_Y), Application.WorksheetFunction.Ln(données_X))

A+

EDIT: Avec With c'est plus propre

With Application.WorksheetFunction
Range("A1") = Exp(.Index(.LinEst(.Ln(donnéesY), .Ln(donnéesX)), 1, 2))
Range("A2") = .Slope(.Ln(données_Y), .Ln(données_X))
End With

Désolé pour la double réponse

Merci pour ta réponse,

Désolé mais je débute en VBA. Qu'entend par mettre tes formules dans une cellule ?

Est-ce que je dois le faire depuis le code ? Si oui, le logiciel me marque que la syntaxe n'est pas bonne

Re,

Tes formules fonctionnent sur Excel ?

Pourquoi veux-tu passer par du VBA ?

• Accède à l'éditeur VBA avec le raccourci Alt+F11

• Insertion -> Module

• Coller ce code:

Sub test()
With Application.WorksheetFunction
Range("A1") = Exp(.Index(.LinEst(.Ln(donnéesY), .Ln(donnéesX)), 1, 2))
Range("A2") = .Slope(.Ln(données_Y), .Ln(données_X))
End With
End sub

Adapter les cellules ci besoin ici A1 et A2

Executer le code avec F5

A tester..

Ca ne marche pas, j'ai pourtant bien adapté les cellules à ma feuille Excel.

With Application.WorksheetFunction
Cells(18, 23) = Exp(.Index(.LinEst(.Ln(Range(Cells(18, 7), Cells(26, 7))), .Ln(Range(Cells(18, 6), Cells(26, 6)))), 1, 2))
Cells(18, 24) = .Slope(.Ln(Range(Cells(18, 7), Cells(26, 7))), .Ln(Range(Cells(18, 6), Cells(26, 6))))
End With

Je veux passer en VBA parce que je dois répéter cette manip de nombreuses fois et avec des nombres de données différentes. Je pense pouvoir m'adapter à la boucle que j'ai créer après mais c'est surtout pour rédiger ces lignes où je galère un peu

Re, sans trop d'espoir je te propose d'essayer ceci:...

Sub test()
Cells(18, 23) = Exp(Application.WorksheetFunction.Index(Application.WorksheetFunction.LinEst(Application.WorksheetFunction.Ln(Range(Cells(18, 7), Cells(26, 7))), Application.WorksheetFunction.Ln(Range(Cells(18, 6), Cells(26, 6)))), 1, 2))
Cells(18, 24) = Application.WorksheetFunction.Slope(Application.WorksheetFunction.Ln(Range(Cells(18, 7), Cells(26, 7))), Application.WorksheetFunction.Ln(Range(Cells(18, 6), Cells(26, 6))))
End Sub

Mais sans fichier exemple ou même plus d'informations sur le message d'erreur je ne saurais pas t'apporter plus d'aide..

A+

Re,

Je viens de réessayer mais cela affiche toujours une erreur de compatibilité de type. Malheureusement, je ne peux pas partager le fichier Excel, je sais que ça serait bien plus pratique.

Je peux essayer de te d'écrire, c'est un tableau assez simple qui a deux colonnes, en x une largeur et en y la longueur de poutre. Pour chaque largeur, il y a une longueur fixe. Après, ce qui peut poser problème, c'est que les valeurs des poutres dépendent d'une fonction que j'ai créé avec VBA.

Re,

désolé je n'ai pas d'autres idées pour résoudre le problème.

C'est pas grave

Merci bcp pour ton aide !

Salut

Bonjour,

Je reviens sur ce sujet car je peux partager le fichier ce qui sera plus simple pour comprendre.

Ce que j'aimerais ça serait de rendre cette formule utilisable dans mon fichier :

Sub test()

With Application.WorksheetFunction
    Cells(18, 23) = Exp(.Index(.LinEst(.Ln(Range(Cells(18, 7), Cells(26, 7))), .Ln(Range(Cells(18, 6), Cells(26, 6)))), 1, 2))
    Cells(18, 24) = .Slope(.Ln(Range(Cells(18, 7), Cells(26, 7))), .Ln(Range(Cells(18, 6), Cells(26, 6))))
End With

End Sub

Cependant, je ne sais pas pourquoi, un message d'erreur d'incompatibilité de type s'affiche.

Merci d'avance

bonjour,

Je ne comprends pas pourquoi cela donne ce message d'erreur pour le code que tu as mis, mais solution en passant par evaluate.

With Application.WorksheetFunction
    Cells(18, 23) = Evaluate("=Exp(intercept(Ln(" & Range(Cells(18, 7), Cells(26, 7)).Address & "), Ln(" & Range(Cells(18, 6), Cells(26, 6)).Address & ")))")
    Cells(18, 24) = Evaluate("=Slope(Ln(" & Range(Cells(18, 7), Cells(26, 7)).Address & "), Ln(" & Range(Cells(18, 6), Cells(26, 6)).Address & "))")
End With

Merci beaucoup, ça marche nickel !

Après je voudrais l'adapter dans une boucle pour l'utiliser dans plusieurs tableaux les uns en dessous des autres. Mais cela ne devrais pas poser de problème n'est-ce pas ?

re-bonjour,

Mais cela ne devrais pas poser de problème n'est-ce pas ?

non, il suffit de remplacer les constantes qui t'intéressent par des variables.

Range(Cells(18, 7), Cells(26, 7)).Address
x1=18
y1=7
x2=26

Range(Cells(x1, y1), Cells(x2, y1)).Address

Super, merci beaucoup pour ta précieuse aide !

A la prochaine

Rechercher des sujets similaires à "extraire constantes equation tendance puissance vba"