IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer l'équation d'une courbe de tendance dans une cellule Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Par défaut Récupérer l'équation d'une courbe de tendance dans une cellule Excel
    Bonjour,

    Après avoir tracé la courbe de tendance (polynomiale, 3ème degré) d'un nuage de points, j'aimerais pouvoir récupérer l'équation dans une cellule Excel particulière.

    J'ai trouvé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("NCS").Cells(134, 16).Value = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text

    Ça a fonctionné une fois, mais maintenant j'ai un message d'erreur qui s'affiche : "Variable objet ou variable de bloc With non définie". Je ne comprends pas et ne sais pas comment corriger.

    J'ai également deux autres soucis.

    Souci n°1 : J'ai deux graphiques sur une même feuille, comment indiquer que l'on veut l'équation de la courbe de tendance de chacun de ces graphiques ?

    Souci n°2 : Comment pourrais-je me débrouiller pour que chaque coefficient de ma courbe soit dans une case définie ?
    C'est-à-dire qu'au lieu d'avoir dans une seule cellule y = 2x^3 + 3x^2 + x + 5
    J'ai :
    x^3 2
    x^2 3
    x 1
    1 5

    Je vous remercie grandement de vos réponses !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Bonjour Marsama,

    J'avais le même problème que toi, mais je viens de trouver la solution.
    Je t'en fais profiter en espérant que ça fonctionne pour toi aussi.

    en fait l'erreur que tu as vient du fait que tu n'aies pas tapé cette ligne de commande dans un bloc :
    with [..].trendlines(<numéro de ta courbe de tendance>)
    ...
    end with]
    Normalement, si j'ai bien compris, en VBA, on devrait toujours définir les objets en utilisant "Set" ... et utiliser les propriétés en notant ".Propriétés" dans un bloc with.
    Seulement dans 95% des cas ça fonctionne sans, donc on perd l'habitude.
    Ce n'est pas le cas pour DataLabel.
    Avec ce code, tu devrais trouver ton bonheur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets("Feuil1").SeriesCollection(1).Trendlines(1)
            .Type = xlPolynomial
            .DisplayEquation = True
            .DisplayRSquared = True
            Sheets("feuil1").Cells(1, 1).Value = .DataLabel.Text
    End With
    Pour ce qui est de récupérer les coefs dans des cellules séparées, j'ai trouvé ce code : Récupérer Coefs courbe de tendance
    Il ne fonctionne pas chez moi, mais je vais essayer de résoudre ça d'ici demain.
    Bon courage

  3. #3
    Membre averti
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Par défaut
    Bonjour Aurélien,

    Merci beaucoup de ta réponse.

    Est-ce que c'est le code que tu as utilisé tel quel pour extraire l'équation de ta courbe de tendance?

    Je l'ai essayé et ça ne fonctionne toujours pas, mais le message d'erreur est différent :
    "Propriété ou méthode non gérée par cet objet"

    J'avais rajouté par la suite "ActiveChart" entre "Worksheets("")" et "SeriesCollection(1)", mais pareil, ça ne fonctionne toujours pas et je ne sais pas pourquoi.

    D'autant plus que j'ai essayé d'enregistrer la macro en exécutant les actions directement sur Excel. Ça marchait au début (mais uniquement pour une seule des courbes présentes sur mon graphique) et maintenant ça ne fonctionne pas non plus.

    Est-ce que j'aurais activé/désactivé une option par hasard quelque part qui m'empêche désormais d'exécuter ce genre de macro?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Je ne pense pas que tu aies désactivé quoi que ce soit.
    Voici le code exact que j'ai utilisé (tout à l'heure je n'ai pas tout mis pour simplifier mais au final j'ai oublier des morceaux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim Graph As Chart, Feuille As Worksheet, PolynomialTrendLine As Trendline
    Dim Equation As String
     
    Set Feuille = ActiveWorkbook.Worksheets(1)
    With Feuille.ChartObjects(1).Chart
        .HasTitle = True
        .ChartTitle.Text = "Oh Yeah !!"
        '.SeriesCollection(1).Trendlines.Add
        With .SeriesCollection(1).Trendlines(1)
            .Type = xlPolynomial
            .DisplayEquation = True
            .DisplayRSquared = False
            Sheets("feuil1").Cells(20, 2).Value = .DataLabel.Text
        End With
    End With
    Je suis complétement novice en VBA et programmation en général, mais tu trouves pas mal de tutos sur ce site.
    Voici aussi un code qui permet d'extraire les nombres (entiers et relatifs) d'une chaine de caractères. En le modifiant un peut tu devrais pouvoir extraire tes coefs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub extraireValeursNumeriques_DansChaine()
    Dim i As Byte, Nb As Byte
    Dim Cible As String, Resultat As String
    Dim Nombre As Double
    Cible = "12,3azerty23,5 67"
    'Pour que fonction Val puisse reconnaitre les décimales: Remplacement des
    'virgules par des points
    Cible = Replace(Cible, ",", ".")
    'Pour gérer deux nombres qui se suivent: remplacement des espaces
    'par un caractère Alpha
    Cible = Replace(Cible, " ", "x")
    For i = 1 To Len(Cible)
    If IsNumeric(Mid(Cible, i, 1)) Then
    Nombre = Val(Mid(Cible, i, Len(Cible) - i + 1))
    Nb = Nb + 1
    Resultat = Resultat & Nombre & vbLf
    i = i + Len(Str(Nombre)) - 1
    End If
    Next
    MsgBox "Il y a " & Nb & " valeurs numériques dans la cellule " & vbLf & Resultat
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Par défaut
    Excel est bizarre, j'ai redémarré l'application et maintenant il veut bien m'enregistrer ma macro manuellement...

    Enfin bref, j'ai réussi à obtenir l'équation pour chacune de mes courbes en utilisant un code différent du tien, mais qui fonctionne.
    Il nécessite cependant que l'équation des courbes soit déjà affichée sur le graphique en lui-même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ActiveSheet.ChartObjects("Graphique 1").Activate
        ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
        ActiveWindow.Visible = False
        Windows("Synth.xls").Activate
        Range("O143").Value = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
    Je vais étudier le code que tu m'as indiqué pour extraire les coefficients.

    Merci encore.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 15
    Par défaut
    Je te déconseille fortement l'utilisation de et Il faut effectivement afficher l'équation de la courbe de tendance sur le graphe avant de pouvoir la récupérer, d'où le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .DisplayEquation = True
    Mon code fonctionne pour une Feuille comportant un graph (pas une feuille graphique) avec une seule courbe (Série de données).
    Je te conseille une boucle du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each CourbeDeTendance In Trendlines
        With CourbeDeTendance
            .DisplayEquation = True
            Sheets("feuil1").Cells(1, i).Value = .DataLabel.Text
        End With
        i = i + 1
    Next CourbeDeTendance

  7. #7
    Membre averti
    Inscrit en
    Février 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 15
    Par défaut
    C'est bon, la formule DROITEREG fonctionne, je n'avais pas mis mes données en colonnes...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Récupérer dans une requête un libellé dans une table liste
    Par ibill dans le forum Access
    Réponses: 6
    Dernier message: 06/08/2012, 16h03
  2. Réponses: 9
    Dernier message: 13/03/2008, 01h34
  3. insertion dans une table puis update dans une autre table
    Par uptoditime dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/10/2007, 18h08
  4. Recherche de valeur dans une feuille et affichage dans une autre
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2007, 09h40
  5. Réponses: 3
    Dernier message: 06/09/2006, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo