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 :

Programmation manuelle fonction de calcul de skewness


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Par défaut Programmation manuelle fonction de calcul de skewness
    Bonjour à tous,

    Après avoir chercher longuement sur internet, je n'ai pas trouvé la solution à mon problème, c'est pourquoi je m'en remets à vous aujourd'hui

    Voici mon problème: je souhaite programmer sur VBA une fonction qui me permettent de calculer la skweness de chaque colonne d'une variable tableau sans utiliser ni la fonction WorksheetFunction.Skew ni la fonction COEFFICIENT.ASYMETRIE directement dans Excel.

    Pour cela j'ai crée d'abord deux fonctions que je réutilisent dans ma fonction de calcul de skewness: l'une calculant la moyenne de chaque colonne d'une variable tableau et l'autre calculant l'écart-type. Ces deux fonctions marchent parfaitement.


    Par ailleurs, j'ai tester ma fonction Skewness sur un petit nombre de valeurs et celle-ci fonctionnait.

    Le problème survient lorsque je demande le calcul de ma skewness sur une variable tableau plus grande (de taille (71,450)). lorsque j'éxécute le code faisant appel à ma fonction, le programme me renvoit erreur 6 dépassement de capacité. J'ai eu beau changé les types de variable en essayant de tout mettre en variant mais cela n'a rien changé. Alors même si il y a quand même un certain nombre de valeurs qui rentrent en jeu je n'ai pas 1 millions de valeurs.
    J'ai pu également remarqué de si dans ma variable tableau, je ne mettais que des petits valeurs (par exemple 0,1) alors là ma fonction marchait.

    Si quelqu'un a une idée pour résoudre ce problème, je suis preneur. Pour que ce soit plus clair, je vous joins mon fichier excel.
    Merci d'avance.

    skew.xlsskew.xls

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Bol

    Pour éviter le dépassement de capacité trop rapide, Utilise le type LONG plutôt que le type INTEGER.

    Et gère également les divisions par 0.


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Function skew(A)
     
    Dim i As Long, j As Long, m As Long, n As Long  'Integer
    n = UBound(A, 1)
    m = UBound(A, 2)
     
    Dim moy() As Double
    ReDim moy(1, m)
    Dim ecart() As Double
    ReDim ecart(1, m)
    Dim sigma() As Double
    ReDim sigma(1, m)
    Dim skewness() As Double
    ReDim skewness(1, m)
     
    moy = mamoyenne(A)
    sigma = monecarttype(A)
     
    For j = 1 To m
     
        For i = 1 To n
     
        ecart(1, j) = ecart(1, j) + (A(i, j) - moy(1, j)) ^ 3
     
        Next i
     
        sigma(1, j) = (sigma(1, j) / (n - 1)) ^ (1 / 2)
     
         If (sigma(1, j)) = 0 Then
            Stop
            Else
        skewness(1, j) = (n / ((n - 1) * (n - 2))) * (ecart(1, j) / (sigma(1, j)) ^ 3)
       End If
     
     
    Next j
     
    skew = skewness
     
    End Function

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Par défaut
    Tout d'abord je te remercie beaucoup pour ta réponse Doc marti.

    J'ai essayé le code que tu as modifié et quand je le lance, le problèpe est qu'il s'arrête et me surligne en jaune la ligne Stop alors que la première valeur n'est pas censée être nulle. Est-ce normal ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 55
    Par défaut
    Ah non désolé, le code est bon, c'est moi qui avais fait une petite erreur. Tout fonctionne désormais.

    Merci encore de m'avoir sorti de cette impasse en si peu de temps

    Bon week-end

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

Discussions similaires

  1. inversion de fonction de calcul
    Par jarko dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 16/12/2005, 18h31
  2. Réponses: 6
    Dernier message: 22/11/2005, 17h08
  3. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55
  4. Réponses: 2
    Dernier message: 31/05/2005, 09h50
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 11h00

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