XL 2010 Associer une macro à une feuille - VBA

Taha Hessane

XLDnaute Nouveau
Bonjour,

Dans le cadre d'un projet, je dois calculer les moments d'odre 1 2 3 et 4 d'un groupe de variables à l'aide de VBA.
Je ne suis pas super bon mais j'ai quand même réussi à créer des macros qui calculent exactement ce dont j'ai besoin.
Le ficher que j'utilise est composé de 5 feuilles, les 4 premières sont des listes de valeurs et la dernière est une feuille vide appelé statistique. (je décrit car je n'arrive pas à mettre le ficher en pièce jointe)
j'ai crée 4 macros (une correspondante à chaque feuille) de tel sorte : (exemple d'une d'entre elles)

Sub mom1()
Dim i As Integer

Dim moy, som, som1, som2, som3, stde, sk, ku As Single
'je déclare les variables que je vais utiliser pour calculer les moments

som = 0
som1 = 0
som2 = 0
som3 = 0
'sélection de la feuille que je souhaite utilisé
Sheets(1).Select
'je calcule d'abord la moyenne


For i = 2 To 2147
som = som + Cells(i, 2).Value

Next i

moy = som / 2146

MsgBox " moyenne AMAZON :" & moy

'calcul de l'écart-type
For i = 2 To 2147
som1 = som1 + (Cells(i, 2).Value - moy) ^ 2

Next i

stde = (som1 / 2146) ^ (1 / 2)
MsgBox " écart-type AMAZON :" & stde

'calcul de skewness et kurtosis
For i = 2 To 2147
som2 = som2 + (Cells(i, 2).Value - moy) ^ 3
som3 = som3 + (Cells(i, 3).Value - moy) ^ 4

Next i

sk = som2 / (2146 * stde ^ 3)
ku = som3 / (2146 * stde ^ 4)

MsgBox " skewness AMAZON :" & sk
MsgBox " kurtosis AMAZON :" & ku

End Sub


Le problème est que il faut que j'affiche les résultats dans la feuille5 du fichier appelé " statistiques", et je n'arrive pas à le faire, est ce que quelqu'un pour m'aider ? aussi si vous avez des commentaires à faire sur comment améliorer mon code je suis preneur aussi

Merci d'avance
 

fanfan38

XLDnaute Barbatruc
Dim derlig As Long

derlig = Sheets("statistiques").Range("a" & Rows.Count).End(xlUp) + 1
Sheets("statistiques").Cells(derlig, 1).Value = sk
Sheets("statistiques").Cells(derlig, 2).Value = ku
...

Plutôt que de créer 4 macros identiques il vaut mieux faire une macro dans un module et l'appeler à partir de la feuille...
A+ François
 

Taha Hessane

XLDnaute Nouveau
Bonjour,
merci de votre réponse,


Cependant je n'arrive pas à regrouper les 4 macros en une seule, le truc c'est que ce n'est pas toujours le même nombre de donnée donc je ne peux pas appliqué exactement la même formule, est ce que vous pourriez m'aider ?

Taha
 

Taha Hessane

XLDnaute Nouveau
J'ai essayé, et j'arrive à ça, le problème c'est que ça marché parfaitement pour la première feuille mais pour le reste ça donne un mauvais résultat,
qu'en pensez vous ?


Sub mom1()
Dim i As Integer
Dim k As Byte
Dim moy, som, som1, som2, som3, stde, sk, ku As Single
'je déclare les variables que je vais utiliser pour calculer les moments
som = 0
som1 = 0
som2 = 0
som3 = 0
'sélection de la feuille que je souhaite utilisé
For k = 1 To 4
Sheets(k).Select
'je calcule d'abord la moyenne
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row

som = som + Cells(i, 2).Value

Next i

moy = som / (Range("B" & Rows.Count).End(xlUp).Row - 1)
MsgBox " moyenne :" & moy
'calcule de l'écart-type
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row

som1 = som1 + (Cells(i, 2).Value - moy) ^ 2

Next i

stde = (som1 / (Range("B" & Rows.Count).End(xlUp).Row - 1)) ^ (1 / 2)
MsgBox " écart-type :" & stde
'calcule de skewness et kurtosis
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row

som2 = som2 + (Cells(i, 2).Value - moy) ^ 3
som3 = som3 + (Cells(i, 3).Value - moy) ^ 4

Next i
sk = som2 / ((Range("B" & Rows.Count).End(xlUp).Row - 1) * stde ^ 3)
ku = som3 / ((Range("B" & Rows.Count).End(xlUp).Row - 1) * stde ^ 4)

MsgBox " skewness :" & sk
MsgBox " kurtosis :" & ku

Next k
End Sub
 

Discussions similaires

Réponses
0
Affichages
352

Statistiques des forums

Discussions
315 091
Messages
2 116 109
Membres
112 662
dernier inscrit
lou75