Courbe + courbe de tendance + linéarisation partielle même graphique

Bonjour,

Je souhaite afficher sur un même graphique :
-Une première courbe
-La courbe de tendance de la précédente
-La droite approchant la partie linéaire de la première courbe

Je n'ai pas de problème pour les deux premières, en revanche je bloque pour la dernière.

Voici la partie de mon code concernée:

Set ws = Sheets(Nom)
ws.Activate
With ws
xval = Range("A2:A22") 'abscisse
yval = Range("B2:B22") 'ordonnée
Set chGraph = .ChartObjects.Add(500, 50, 500, 300)
With chGraph.Chart
           .ChartType = xlXYScatterLines
           .SeriesCollection.NewSeries
           .HasTitle = True
           .ChartTitle.Text = "Pin vs Pout à " + Nom
            With .SeriesCollection(1)
               .XValues = xval
               .Values = yval
               With .Trendlines.Add
                   .Type = xlPolynomial
                   .Order = 3
                   .DisplayEquation = True
                   .DisplayRSquared = True
               End With
               .Add Source:=ws.Range("H2:H22") 'Tentative pour afficher la partie linéaire de la première courbe
            End With
            With .Axes(xlCategory)
                .MinimumScale = 15
                .MaximumScale = 36
                .HasTitle = True
                .AxisTitle.Text = "Puissance d'entrée (dBm)"
            End With
            With .Axes(xlValue)
                .MinimumScale = 30
                .MaximumScale = 46
                .HasTitle = True
                .AxisTitle.Text = "Puissance de sortie (dBm)"
            End With
      End With
End With

Merci pour votre aide,

bonsoir,

vous avez quelque valeurs X,Y pour jouer avec ?

Bonjour,

Prenons les suivantes:

A2:A22 : 15, 16, 17 ... 33, 34, 35
B2:B22 : 28.1, 28.8, 29.4, 30.0, 30.5, 31.5, 32.0, 32.4, 32.8, 33.15, 33.4, 33.6, 33.7, 33.8, 33.9, 34.0, 34.1, 34.1, 34.1, 34.1

Et on va dire que le coefficient directeur de la partie linéaire vaut 10.

bonjour,

je ne comprends pas "Et on va dire que le coefficient directeur de la partie linéaire vaut 10."

c'est ceci que vous demandez, mais alors en VBA ?

26evariste.xlsx (23.68 Ko)

Bonjour,

Effectivement c'est ce que je souhaite faire. Devant répéter l'opération avec une quarantaine de données d'entrée différentes et potentiellement des évolutions dans l'ordre de la régression il me paraît judicieux d'utiliser une macro.

Pour ce qui est du coefficient directeur, celui-ci est une donnée (tout comme les valeurs que je vous ai indiquées à titre d'exemple) que je ne peux communiquer.

comme essai, ajouter une ligne, peut-être pas 100% ce que vous demandez ??? (Je ne connais pas les bonnes termes en français)

Sub Add_Trendline()

     Dim dDirection, dCoeff, dR2, MyX, MyY, Xarr, Yarr
     nmb = 10     'les 10 dernieres lignes

     With ActiveSheet
          Set c = .ListObjects(1).DataBodyRange     'vos données
          Set c1 = c.Cells(c.Rows.Count, 1)     'dernier cellule
          MsgBox c1.Offset(-nmb + 1, 1).Resize(nmb).Address & " as Y" & vbLf & c1.Offset(-nmb + 1).Resize(nmb).Address & " as X"     'informer
          MyX = c1.Offset(-nmb + 1).Resize(nmb).Value     'matrice avec les 10 derniers X-valeurs
          MyY = c1.Offset(-nmb + 1, 1).Resize(nmb).Value     'matrice avec les 10 derniers Y-valeurs

          a = WorksheetFunction.LinEst(MyY, MyX, 1, 1)     'matrice avec tout les informations
          dDirection = a(1, 1)
          dCoeff = a(1, 2)
          dR2 = a(3, 1)
          Xarr = Array(MyX(1, 1), MyX(UBound(MyX), 1))     'X-valeurs poru la nouvelle série
          Yarr = Array(dCoeff + dDirection * MyX(1, 1), dCoeff + dDirection * MyX(UBound(MyX), 1))     'Y-valeurs pour la nouvelle série

          With .ChartObjects("Mon Graphique").Chart     'votre graphique
               With .SeriesCollection.NewSeries     'nouvelle série
                    .Name = "=""Explication Trend"""
                    .XValues = Xarr
                    .Values = Yarr
                    .Format.Line.Weight = 2.75     'épaisseur
                    .Format.Line.DashStyle = msoLineSysDash     'lignes avec points
                    .MarkerStyle = -4142     'no markers
               End With
          End With
     End With
End Sub
15evariste-1.xlsb (32.21 Ko)

Merci pour votre essai,

Cela fonctionne effectivement même si cela contourne le problème.

Je n'aime pas en VBA utiliser la méthode LinEst qui fait un bricolage du travail propre de Trendlines.
En effet, si l'on souhaite changer la forme de la fonction (de polynomiale d'ordre 2 à l'ordre 4 ou exponentielle par exemple) il faut avec LinEst réécrire une partie du code, tandis qu'avec Trendlines il suffit de changer un paramètre.

La question reste poser, comment peut-on ajouter une courbe à une autre utilisant Trendlines ?

Honnêtement s'il faut repasser par LinEst, autant faire la manipulation en Python.

on peut lire le contenu de "datalabel" du trendline, si c'est cela que vous voulez dire. Donc je pensais, je met cela dans un boucle, seul problème, il n'y a pas un update du datalabel pendant ce boucle. Donc, pour vous, modifiez le trendline en manuel et lisez après l'update le datalabel with VBA.

Sub TrendLineDetails()

     Set trend_line_1 = ActiveSheet.ChartObjects("Mon Graphique").Chart.FullSeriesCollection(1).Trendlines(1)
     trend_line_1.DataLabel.NumberFormat = "0,000000000000E+00"     'notation scientifique pour plus de chiffres

     For i = 2 To 6
          With trend_line_1
               .Type = xlPolynomial
               .Order = i
          End With

          With trend_line_1.Parent 'force unsuccessfull update
               .XValues = .XValues
          End With

         Sheets("blad2").Activate 'also unsuccessfull
         Sheets("blad1").Activate

          s = trend_line_1.DataLabel.Format.TextFrame2.TextRange.Text
          sp = Split(Replace(Replace(Replace(Replace(s, " +", "|+"), " -", "|-"), "=", "=|"), Chr(11), "|"), "|")

          MsgBox vbLf & Join(sp, vbLf), vbInformation, "trendline coefficients, order " & i
     Next
End Sub
19evariste-1.xlsb (37.60 Ko)

un petit peut différent et ceci fonctionne, bizarre ...

33evariste-1.xlsb (37.62 Ko)
Rechercher des sujets similaires à "courbe tendance linearisation partielle meme graphique"