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 :

Approximation "LOGEST" et tableau (ou approximation puissance ?) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut Approximation "LOGEST" et tableau (ou approximation puissance ?)
    Bonjour à tous,

    J'aurais deux questions différentes mais qui se rejoingnent :

    1) Je suis actuellement en train de faire des approximations exponentielles en VBA grace à la fonction "LOGEST". Cependant, ma manière de procéder n'est absolument pas optimale ce qui implique un temps d'execution particulièrement long...
    J'utilise le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Evaluate("=LOGEST(Q79:Q109)")
    un grand nombre de fois.
    Mon but est en fait de calculer plusieures approximations exponentielles de suite sur des atténuations successives d'une courbe origine pour trouver la meilleure correspondance. Bref, ceci n'a que peu d'intérêt.
    J'ai dans un tableau à trois dimensions les valeures de ma courbes et de ses atténuations.
    Ma question est donc : existe-t-il une fonction en VBA qui possède les mêmes fonctionnalité que ma fonction "LOGEST" ?
    Actuellement, je place les valeurs de mon tableau dans la rage précédemment citée, j'execute ma fonction "LOGEST", j'efface la range en question et je recommence... pas optimale, n'est-ce pas (surtout quand il s'agit de le faire plus de 500 fois)... J'aimerai utiliser la fonction VBA que je vous demande directement sur mon tableau, sans avoir a copier ses valeurs dans des cellules. Mais je ne sais pas procéder de cette manière à l'heure actuelle...

    2) Question qui ne prendra pas le même nombre de ligne : existe-t-il une fonction identique à "LOGEST" mais pour les approximations puissances ?
    Il semblerait que mon R² soit meilleur avec ces approximations-ci plutôt que les exponentielles.

    Je vous remercie par avance pour vos réponses tout en restant à votre disposition si vous voulez m'apporter votre aide si je n'ai pas été suffisament clair ! =)

    Merci !!!

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Salut,

    Pour la question 1), oui tu peux travailler sur des tableaux plutôt que sur des Range:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test_LogEst()
     
        Dim estim As Variant
        Dim y() As Variant
     
        ReDim y(1 To 5)
        For i = 1 To 5         'on définit un vecteur y test
            y(i) = 3 * 5 ^ i
        Next i
     
        estim = WorksheetFunction.LogEst(y)
        Debug.Print estim(1), estim(2)    'renvoie les paramètres 5 et 3
     
    End Sub
    Par contre, je pense que ce sont les utilisations successives du LogEst qui prennent du temps. Mais bon je n'ai pas trop compris la mécanique de ce que tu veux faire. Avec un petit exemple ça serait peut être plus clair.
    Es tu vraiment obligé de lancer 500 approx. successives?

    Pour la question 2), qu'appelles-tu
    les approximations puissances ?
    Cordialement.

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    SUPER !!! La vitesse d'execution n'a pas d'égale pour le coup ! Je savais que c'était le fait de copier les valeurs qui posait soucis ! Merci beaucoup ! (Je passe de 202.1 secondes à moins de 2 secondes)

    Ce que j'appelle "approximation puissance" c'est ce que j'ai trouvé dans les graphes excel. En effet, quand je clique sur "Ajouter une courbe de tendance" on peut voir qu'il en existe de multiple dont celle qui s'intitule "puissance". Mon R² est le meilleur avec celle-ci. Je voudrais donc savoir s'il existe une manière de tracer cette courbe de tendance de manière automatique de la forme y = A * x^(B) (c'est à dire, trouver le A et le B).

    Merci déjà pour l'amélioration !




    EDIT : Question subsidiaire => peut-on faire un "WorksheetFunction.LogEst(...)" avec un tableau à deux (ou plus) dimensions ?

    Actuellement je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                    ReDim Extract_tab(1 To 31)
                    For j = 1 To 31
                        Extract_tab(j) = Tab_30(j, k, l)
                    Next j
     
                    'Make the "LogEst" and place the data in the table "Tb"
                    Tb = WorksheetFunction.LogEst(Extract_tab())
    Je place toutes mes valeurs j du tableau Tab_30 dans un autre tableau Extract_tab puis le fais le LogEst sur ce tableau. Est-il possible de faire directement le LogEst sur les "j" du tableau Tab_30 ?

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Tant mieux pour le gain de temps.
    Ce que j'appelle "approximation puissance" c'est ce que j'ai trouvé dans les graphes excel. En effet, quand je clique sur "Ajouter une courbe de tendance" on peut voir qu'il en existe de multiple dont celle qui s'intitule "puissance". Mon R² est le meilleur avec celle-ci. Je voudrais donc savoir s'il existe une manière de tracer cette courbe de tendance de manière automatique de la forme y = A * x^(B) (c'est à dire, trouver le A et le B).
    Je pensais qu' Excel se basait aussi sur une régression logarithmique pour "l'approximation puissance" vu que mathématiquement tu peux toujours te ramener à l'exponentielle:
    y = A * x^(B) = A *exp (B * ln x).
    Mais si ton indicateur R² est différent, c'est que la méthode de calcul doit varier...? En tous cas je ne connais pas de fonction autre que LogEst pour faire ça.

    Est-il possible de faire directement le LogEst sur les "j" du tableau Tab_30 ?
    Non ce n'est pas possible. Mais es-tu obligé de passer par un tableau à 3 dimensions?

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Tu viens de démontrer de cette manière que l'approximation est différente ! =)
    y = A * x^(B) = A *exp (B * ln x)
    L'approximation exponentielle étant y = A * exp(B * x).

    Bref, je te remercie pour tout ! Je passerais par mon Extract_tab ! =)

    Merci encore !

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

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