Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Boucle colonne su VBA

1 réponse
Avatar
lucho93
Bonjour, Je souhaite faire des statistiques descriptives sur des rendements financiers. Pour cela je dispose d'une feuille Excel avec plusieurs colonnes.

L'objectif est alors de faire les statistiques pour chacune des 15 colonnes.

Mon problème est de réussir à parcourir toutes les colonnes.
Voici mon code

Sub stat()

Dim Plage_Rentabilité As Range
Dim feuille As Worksheet
Dim Nombre_Lignes, Numero_Lignes As Integer
Dim i As Integer
Dim j As Integer

Nombre_Lignes = Worksheets.Count - 2
ReDim Tableau_resultat(Nombre_Lignes, 6) As Variant
Numero_Lignes = Numero_Lignes + 1

For Each Col In Range("B2:P2").Columns
Set Plage_Rentabilité = Range(Selection, Selection. _
End(xlDown))

Tableau_resultat(1, 1) = "colonne1"
Tableau_resultat(0, 2) = "observation"
Tableau_resultat(Numero_Lignes, 2) = WorksheetFunction.Count(Plage_Rentabilité)
Tableau_resultat(0, 3) = "Moyenne"
Tableau_resultat(Numero_Lignes, 3) = WorksheetFunction.Average(Plage_Rentabilité)
Tableau_resultat(0, 4) = "Skweness"
Tableau_resultat(Numero_Lignes, 4) = WorksheetFunction.Skew(Plage_Rentabilité)
Tableau_resultat(0, 5) = "Kurtosis"
Tableau_resultat(Numero_Lignes, 5) = WorksheetFunction.Kurt(Plage_Rentabilité)
Tableau_resultat(0, 6) = "Ecart-type"
Tableau_resultat(Numero_Lignes, 6) = WorksheetFunction.StDev(Plage_Rentabilité)

Next

Worksheets("Feuil2").Activate
For i = 1 To Nombre_Lignes
For j = 1 To 6
Cells(i + 1, j).Value = _
Tableau_resultat(i, j)
Next j

Next i

End Sub


J'obtiens alors qu'une ligne de résultat au lieu de 15 pour chacune des colonnes.
De plus seul "colonne" s'affiche pour ce qui est de mon tableau.

Merci pour votre aide.

1 réponse

Avatar
MichD
Bonjour,

Je n'ai pas tout compris... mais essaie ceci :

Tu adaptes le nom des plages.
'-----------------------------------------------
Sub stat()

Dim Plage_Rentabilité As Range, C As Range, Col As Range
Dim Ligne As Long, DerLig As Long

Application.ScreenUpdating = False
With Worksheets("Feuil1") 'Nom feuille source de tes données
DerLig = .Range("B:P").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set Plage_Rentabilité = .Range("B2:P" & DerLig)
End With
With Worksheets("Feuil2") 'Feuille de destination des données
.Range("A1") = "colonne1"
.Range("B1") = "observation"
.Range("C1") = "Moyenne"
.Range("D1") = "Skweness"
.Range("E1") = "Kurtosis"
.Range("F1") = "Ecart-type"
.Range("A1:F1").Font.Bold = "True"
Ligne = 1
For Each Col In Range("B2:P2").Columns
Ligne = Ligne + 1
.Cells(Ligne, 2) = WorksheetFunction.Count(Col)
.Cells(Ligne, 3) = WorksheetFunction.Average(Col)
.Cells(Ligne, 4) = WorksheetFunction.Skew(Col)
.Cells(Ligne, 5) = WorksheetFunction.Kurt(Col)
.Cells(Ligne, 6) = WorksheetFunction.StDev(Col)
Next
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------





MichD
--------------------------------------------
"lucho93" a écrit dans le message de groupe de discussion :

Bonjour, Je souhaite faire des statistiques descriptives sur des rendements
financiers. Pour cela je dispose d'une feuille Excel avec plusieurs colonnes.

L'objectif est alors de faire les statistiques pour chacune des 15 colonnes.

Mon problème est de réussir à parcourir toutes les colonnes.
Voici mon code

Sub stat()

Dim Plage_Rentabilité As Range
Dim feuille As Worksheet
Dim Nombre_Lignes, Numero_Lignes As Integer
Dim i As Integer
Dim j As Integer

Nombre_Lignes = Worksheets.Count - 2
ReDim Tableau_resultat(Nombre_Lignes, 6) As Variant
Numero_Lignes = Numero_Lignes + 1

For Each Col In Range("B2:P2").Columns
Set Plage_Rentabilité = Range(Selection, Selection. _
End(xlDown))

Tableau_resultat(1, 1) = "colonne1"
Tableau_resultat(0, 2) = "observation"
Tableau_resultat(Numero_Lignes, 2) WorksheetFunction.Count(Plage_Rentabilité)
Tableau_resultat(0, 3) = "Moyenne"
Tableau_resultat(Numero_Lignes, 3) WorksheetFunction.Average(Plage_Rentabilité)
Tableau_resultat(0, 4) = "Skweness"
Tableau_resultat(Numero_Lignes, 4) = WorksheetFunction.Skew(Plage_Rentabilité)
Tableau_resultat(0, 5) = "Kurtosis"
Tableau_resultat(Numero_Lignes, 5) = WorksheetFunction.Kurt(Plage_Rentabilité)
Tableau_resultat(0, 6) = "Ecart-type"
Tableau_resultat(Numero_Lignes, 6) WorksheetFunction.StDev(Plage_Rentabilité)

Next

Worksheets("Feuil2").Activate
For i = 1 To Nombre_Lignes
For j = 1 To 6
Cells(i + 1, j).Value = _
Tableau_resultat(i, j)
Next j

Next i

End Sub


J'obtiens alors qu'une ligne de résultat au lieu de 15 pour chacune des
colonnes.
De plus seul "colonne" s'affiche pour ce qui est de mon tableau.

Merci pour votre aide.