VBA - Virgule manquante dans m et b l'équation de droite

Chips -  
Pierre1310 Messages postés 8854 Statut Membre -
Bonjour,

J'ai un petit soucis concernant des équations de courbes de tendance, à partir d'un graphique qui a deux courbes de tendances linéaires, j'essaye de récupérer les m et b (y=mx+b) des deux équations pour les mettre dans des cases.

Le code que j'ai fonctionne très bien pour les afficher dans la MsgBox, mais une fois dans les cases les virgules disparaissent pour la moitié des valeurs ce qui m'embête quelque peu... Je cherche donc quelqu'un qui saurait comment les faire réapparaitre

Voici le code en question :


Sub Recup_eq_droite()

Dim Equation

With Feuil1.ChartObjects(1).Chart.SeriesCollection(1).Trendlines(1) '1ere eq
.DisplayRSquared = False
.DisplayEquation = True
Equation = Split(.DataLabel.Text)
End With

Range("E20").Value = Left(Equation(2), Len(Equation(2)) - 1)
Range("G20").Value = Equation(3) & Equation(4)

MsgBox "Pente = " & Left(Equation(2), Len(Equation(2)) - 1) _
& vbCrLf & vbCrLf & "Ordonnée à l'origine = " & Equation(3) & Equation(4)

With Feuil1.ChartObjects(1).Chart.SeriesCollection(2).Trendlines(1) '2e eq
.DisplayRSquared = False
.DisplayEquation = True
Equation = Split(.DataLabel.Text)
End With

Range("E21").Value = Left(Equation(2), Len(Equation(2)) - 1)
Range("G21").Value = Equation(3) & Equation(4)

End Sub


Merci de l'aide que vous pourrez m'apporter.
Bonne journée

Chips

A voir également:

4 réponses

Pierre1310 Messages postés 8854 Statut Membre 652
 
Bonjour,

Modifies le format de cellule tout simplement.
0
Chips
 
Bonjour Pierre, et merci de ta réponse

J'ai essayé mais ça ne fonctionne pas, le soucis c'est que plutôt que de récupérer 48.777 par exemple je me retrouve avec 48777, si je change le format il m'affiche 48777.000 et il est pris en compte comme ça dans les calculs suivant ce qui change considérablement mes résultats
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Dim Equation

C'est pas bon, il faut que tu fasse
Dim Equation as double
0
Chips
 
Si je change ça il me met :

Erreur de compilation :
Tableau attendu

Et ça ne se lance plus du tout
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Tu te sers de combien de cellule de tableau?
J'en vois 4 donc
Dim Equation(4) as double


Oublie pas que tu peux te servir du 0
0
Chips > Pierre1310 Messages postés 8854 Statut Membre
 
C'est à dire ? Pour afficher ?
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Dans ton code tu utilise Equation(1) à Equation(4)
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Bonjour,

pourquoi t'embêter à récupérer l'équation sur le graphique ?
Tu as DROITEREG() pour ça.
Application.LinEst() en VBA mais si le but est de mettre m et b dans une cellule pas besoin de vba.
ou bien PENTE() et ORDONNEE.ORIGINE() si tu préfères à une matrice (m,b).
Et si le but est d'interpoler tu as Tendance() ou Application.Trend() pour l'avoir directement.
eric

edit: remplacé COEFFICIENT.CORRELATION par ORDONNEE.ORIGINE

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
Chips
 
Merci de ta réponse
Mais il ne faut pas des points précis de la droite pour utiliser ces fonctions ?

Et pour le VBA mon programme fonctionne presque, même si au final il n'est pas si utile j'aimerais trouver ce qui cloche je n'aime pas abandonner des projets sans savoir pourquoi ça ne marche pas
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Ben il faut utiliser ton tableau de points qui t'ont servi à tracer ta courbe.
Regarde l'aide excel sur ces fonctions, elle est très bien faite.

Et quand tu mets :
Range("E21").Value = Left(Equation(2), Len(Equation(2)) - 1)

C'est une chaine, pas un numérique. Qui en plus ne prend pas en compte ton séparateur décimal selon le cas.
Essaie avec :
CDbl(Range("E21").Value = Left(Equation(2), Len(Equation(2)) - 1))

Sinon sans fichier...
0
Chiiiiips Messages postés 11 Statut Membre
 
ça ne marche pas non plus tant pis merci des conseils

On ne peut pas mettre de fichier sur ce forum si ?
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Vas sur le site cijoint.com et colle le lien.
0
Chiiiiips Messages postés 11 Statut Membre
 
Merci, voilà le fichier
https://www.cjoint.com/c/FDpmZicWj2g
0
ccm81 Messages postés 11033 Statut Membre 2 433
 
Bonjour à tous

Pour récupérer l'équation de la droite de régression (données source en A2:B12) via vba en A15:B15, tu peux faire plus simple

Dim f As String, plage As String, m As Double, b As Double
plage = "B2:B12,A2:A12"
f = "=LINEST(" & plage & ")"
' met pente et ordonnée à l'origine en A15 et B15
Range("A15:B15").FormulaArray = f
' récupère la pente et l'ordonnée à l'origine (pas utile bien sûr
m = Range("A15").Value
b = Range("B15").Value

Cdlmn
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Pourquoi faire simple quand on peut faire compliqué ? ;-)
Déjà rejeté : https://forums.commentcamarche.net/forum/affich-33405133-vba-virgule-manquante-dans-m-et-b-l-equation-de-droite#9
0
Chiiiiips Messages postés 11 Statut Membre
 
Mais c'est gentil du conseil, j'essayerais cette méthode la prochaine fois c'est vrai qu'elle à l'air bien plus rapide :)
0