Etablir les statistiques pour des cours de bourse donnés
Bonjour à tous,
Je dois rendre un projet de VBA et je bloque pour faire un programme. J'ai 4 feuilles avec des cours de bourses journaliers (avec chacun 4 données : ouverture, clôture, max, min). Le souci est que je ne peux faire le programme en disant de faire moyenne, écart-type, skewness, kurtosis et nombre de données pour tel colonne puisque pour chaque feuille la colonne change de place. J'ai essayé faire pour le cour à l'ouverture (PX_OPEN), mais ça marche pas et je n'arrive pas à comprendre pourquoi...
Pourriez vous m'aider ? Voici le code :
'Calcul des statistiques
Sub Stat()
Dim i As Integer
For i = 0 To 3
Sheets(1).Cells.Find("PX_OPEN").Select 'je sais pas si c'est activate ou select
ActiveCell.EntireColumn.Select
Sheets(5).Cells(i * 4 + 3, 3) = WorksheetFunction.Average(ActiveColumn) 'la moyenne
Sheets(5).Cells(i * 4 + 3, 4) = WorksheetFunction.StDev(ActiveColumn) 'L'écart type
Sheets(5).Cells(i * 4 + 3, 5) = WorksheetFunction.Skew(ActiveColumn) 'la Skewness
Sheets(5).Cells(i * 4 + 3, 6) = WorksheetFunction.Kurt(ActiveColumn) 'le Kurtosis
Sheets(5).Cells(i * 4 + 3, 7) = ActiveColumn.Cells.Count 'nbe des taux de rentabilités
'Passe à la feuille suivante.
Next i
'Fin de la procédure.
End Sub
Bonjour Adrien,
tu as un classeur avec 4 feuilles de cours de bourses journaliers, et moi j'ai un énoncé sans aucun fichier !
bon, t'as d'jà mis ta sub Stat() ; même sans balises de code, faut avouer qu'c'est d'jà pas si mal !
... mais oh, comme c'est bizarre ! juste avant Next i tu as écrit le commentaire : 'Passe à la feuille suivante
on devrait donc s'attendre à voir Sheets(i) pas vrai ? et que voit-on, plus haut ? Sheets(1) ; ah oui, c'est sûr que comme ça, c'est la meilleure façon d'balayer les 4 feuilles du classeur ! alors faut pas s'étonner si ça marche que pour la 1ère feuille, hein ?
et surtout, le fait que tu utilises i dans tes calculs de numéros de lignes alors que tu avais prévu de l'utiliser pour ton choix de feuille n'est qu'un léger à-côté sans aucune importance ! c'est juste une broutille, une peccadille, quoi ! (mais c'est que mon humble avis)
bon, pour tes résultats, c'est clair qu'il sont tous sur la même feuille : Sheets(5) ; bien sûr, dans un 1er temps, on penserait à utiliser un bloc With Sheets(5) .. End With ... mais dans un 2ème temps, vu l'travail qui est fait, on s'rend compte qu'y'a une meilleure optimisation à faire, pas vrai ? bon allez, j'vais quand même pas tout te souffler : j'te laisse chercher un peu !
j'subodore quand même que ton instruction ActiveCell.EntireColumn.Select pourrait être évitée !
(et peut-être aussi le .Select de l'instruction située juste au-dessus)
dhany
Dany, merci pour ton aide et oui la prochaine fois je mettrais le fichier ce sera plus simple !
Au final, j'ai bien réussi à trouver la solution, je la met au cas où cela serait utile à d'autres.
Merci la communauté !!
For i = 1 To 4
Sheets(5).Cells(i + 1, 1) = Sheets(i).Name
Sheets(i).Activate
Cells.Find("PX_CLOSE").Select 'je trouve la colonne voulue et je la sélectionne
Set Selec = ActiveCell.EntireColumn
Sheets(5).Cells(i + 1, 2) = "PX_CLOSE"
Sheets(5).Cells(i + 1, 3) = WorksheetFunction.Average(Selec) 'la moyenne
Sheets(5).Cells(i + 1, 4) = WorksheetFunction.StDev(Selec) 'L'écart type
Sheets(5).Cells(i + 1, 5) = WorksheetFunction.Skew(Selec) 'la Skewness
Sheets(5).Cells(i + 1, 6) = WorksheetFunction.Kurt(Selec) 'le Kurtosis
Sheets(5).Cells(i + 1, 7) = Application.WorksheetFunction.CountA(Selec) - 1 'nb de données avec -1 pour enlever le titre
J'suis ravi d'avoir pu t'aider !
dhany