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 :

Coefficients polynôme de tendance [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Coefficients polynôme de tendance
    Bonjour,

    Je travaille sur un projet en utilisant VBA sous EXCEL, et j'ai un petit soucis .

    J'ai deux colonnes qui contiennent des données que je trace l'une en fonction de l'autre, et je trace aussi la courbe de tendance de type polynomiale de degré 3.

    Je voudrai savoir comment je peux récupérer par un code VBA la valeur des 4 coefficients du polynôme.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Avec l'enregistreur de macro ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci Daniel pour votre interaction...

    Je voudrai les récupérer dans des variables a,b,c et d, donc nécessairement avec du code...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    D'accord, j'avais lu de travers (merci à durdesfois s'il fréquente encore ce forum) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Eq As String
    With Sheets("Feuil4").ChartObjects(1).Chart.SeriesCollection(1).Trendlines(1)
        .DisplayEquation = True
        Eq = .DataLabel.Text
        tabl = Split(Eq, " ")
        MsgBox "coeff 1 : " & tabl(1) & Split(tabl(2), "x")(0)
        MsgBox "coeff 2 : " & tabl(3) & Split(tabl(4), "x")(0)
        MsgBox "coeff 3 : " & tabl(5) & Split(tabl(6), "x")(0)
        MsgBox "coeff 4 : " & tabl(7) & Split(tabl(8), "x")(0)
        MsgBox "constante : " & tabl(9) & Split(tabl(10), "x")(0)
    End With
    Reste à affiner. J'ai laissé le "=" du premier coef car je ne sais pas si je pourrais récupérer s'il y avait un signe "-" en tête.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    c'est bizarre y a t il pas de moyen pour avoir la valeur de ces coefficients sans passer par le graphique ? sans même le tracer ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    et je trace aussi la courbe de tendance de type polynomiale de degré 3.
    sans passer par le graphique ? sans même le tracer ?
    Faudrait savoir...
    C'est sans doute possible, puisque Excel le fait; mais pas moi; je ne suis pas un matheux...
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci quand même Daniel pour votre aide

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Va te résoudre ton equation de degré 3:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function DEG3b(a#, ByVal b#, c#, d#)
    Application.Volatile
    Dim p#, q#, r#, s#, rx1#, rx2#, rx3#, ix2#, ix3#
        b = b / a / 3
        p = b * b - c / a / 3
        q = (b * c - d) / a / 2 - b * b * b
        r = q * q
        s = p * p * p
        If Abs(r - s) < 0.00000000000001 Then
            p = Sgn(q) * Abs(q) ^ (1 / 3)
            rx1 = 2 * p
            rx2 = -p
            rx3 = -p
        ElseIf r < s Then
            If r / s >= 1 Then r = 2 * (1 - Sgn(q)) * Atn(1) Else r = Atn(-q / Sqr(s - r)) + 2 * Atn(1)
            rx1 = Sqr(p) * Cos((r + 8 * Atn(1)) / 3) * 2
            rx2 = Sqr(p) * Cos((r - 8 * Atn(1)) / 3) * 2
            rx3 = Sqr(p) * Cos(r / 3) * 2
        Else
            r = Sqr(r - s)
            p = Sgn(q + r) * Abs(q + r) ^ (1 / 3)
            q = Sgn(q - r) * Abs(q - r) ^ (1 / 3)
            rx1 = q + p
            rx2 = -rx1 / 2
            ix2 = Sqr(3) * (q - p) / 2
            rx3 = rx2
            ix3 = -ix2
        End If
        DEG3b = Array(rx1 - b, rx2 - b, ix2, rx3 - b, ix3)
    End Function
    Ah j'avais mal compris.. si tu peux la tracer.. il suffit de récupérer les valeurs pour lesquelles elle s'annule (les racines) et les multiplier de la sorte:

    (X - val1)*(X - val2)*(x-val3)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    J'utilise la méthode de Daniel qui parait moins compliquée ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PlotGraph CStr(iStart), CStr(jStart)
    'Tester si le graphe est déjà affiché
    Eq = Sheets("Feuil1").ChartObjects(1).Chart.SeriesCollection(1).Trendlines(1).DataLabel.Text
    tabl = Split(Eq, " ")
    a = CDbl(Split(tabl(2), "x")(0))
    b = CDbl(tabl(3) & Split(tabl(4), "x")(0))
    c = CDbl(tabl(5) & Split(tabl(6), "x")(0))
    d = CDbl(tabl(7) & Split(tabl(8), "x")(0))
    Sheets("Feuil1").ChartObjects(1).Delete
    Mais le problème que le code ne s’exécute pas ligne après ligne ! du coup avant que le graphique ne soit affiché il essaye de récupérer la valeur du label qui n'existe pas et ça pose un problème ...

    Vous avez pas d'idée pour dépasser ce problème ? je dois être sur que le graphe est déjà affiché ...

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Ajoute une ligne avant la ligne 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Wait Now +TimeValue("0:0:2")
    (délai de 2 sec) à régler, ou, peut-être à la place :

    Essaie cette seconde solution en premier.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    La seconde solution ne fonctionne pas ... par contre la première c'est nickel

    J'ai trouvé sur le net une autre façon de faire ...

    Par exemple pour le premier coefficient du polynôme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(DROITEREG(B2:B10;A2:A10^{1.2.3});1)
    ça marche très bien sur EXCEL

    mais si je fais sur VBA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = INDEX(DROITEREG(B2:B10;A2:A10^{1.2.3});1)
    ça donne synataxe error

    une idée pour résoudre ce problème ?

  12. #12
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range.formula="taformuleenanglais"

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Merci EngueEngue pour votre réponse mais je comprend pas vraiment ... je suis nouveau sur VBA => moin d'une semaine

    pouvez vous expliquer un peu plus ?

    Merci.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pour le premier coefficient (changer le dernier indice pour les autres coefficients):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(Application.LinEst(Range("B2:B10"), Application.Power(Range("A2:A10"), Array(1, 2, 3))), 1)
    Tu peux utiliser un tableau pour stocker directement les quatre coefficients en enlevant la fonction '.Index'.
    Dernière modification par Invité ; 19/08/2013 à 13h51.

  15. #15
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Si tu veux rentrer des formules excel.. Soit tu utilises des application.worksheetfunction

    Soit des .formula ou des formula local

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub toto()
    ActiveSheet.Range("A4").FormulaLocal = "=somme(A1:A3)"
    ActiveSheet.Range("A5").Formula = "=sum(A1:A3)"
    End Sub

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Là c'est résolu

    Merci pour votre aide

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

Discussions similaires

  1. Fonction qui renvoit les coefficients d'un polynôme
    Par lisenette dans le forum MATLAB
    Réponses: 7
    Dernier message: 31/03/2014, 13h35
  2. Réponses: 3
    Dernier message: 10/05/2013, 16h23
  3. Polynômes à coefficients réels
    Par casserole dans le forum Maple
    Réponses: 0
    Dernier message: 18/11/2011, 12h28
  4. Réponses: 2
    Dernier message: 05/01/2010, 15h35
  5. récupérer coefficients courbe de tendance
    Par Dinou dans le forum VBA Access
    Réponses: 0
    Dernier message: 04/02/2008, 10h42

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