Fonctions basiques VBA

http://mickael-clevenot.fr/wp-content/uploads/2017/09/CAC40.csv

Sub telecharger() 
Dim strURL As String
strURL = "http://mickael-clevenot.fr/wp-content/uploads/2017/09/CAC40.csv" Workbooks.Open Filename:=strURL ActiveWorkbook.SaveAs Filename:="C:\Users\mickael\Documents\CAC11.xls", FileFormat:=xlNormal
 ' Il vous faudra changer la destination pour que cela fonctionne sur votre machine
 End Sub

Données du CAC40 Yahoo.finance

Sub telecharger()
Dim strURL As String
strURL = "http://mickael-clevenot.fr/wp-content/uploads/2017/09/CAC40.csv"
Workbooks.Open Filename:=strURL
ActiveWorkbook.SaveAs Filename:="C:\Users\mickael\Documents\CAC11.xls", FileFormat:=xlNormal
' Il vous faudra changer la destination pour que cela fonctionne sur votre machine

End Sub

On s’est rendu compte que certaines journées n’étaient pas renseignées. Certainement des jours fériés. Dans le dossier Excel ça donne des cellules avec des “null”. Comme il ne s’agit pas de chiffres, ces lignes bloques certains calculs. Pour y remédier on demande à VBA de supprimer toutes les lignes qui sont composées d’une cellule contenant le terme “null” dans le colonne B.

Sub nettoyage()
Dim i As Long
For i = Range("B65536").End(xlUp).Row To 2 Step -1
If Not Evaluate("=ISERROR(SEARCH(""null"", B" & i & "))") Then Rows(i).Delete
Next i
End Sub

Avec notre base nettoyée des trous, on peut réaliser le calcul du rendement avec la formule suivante ln(p_t/p(t-1))*100, R3.

Sub rend3()
Range("H2").Select
    ActiveCell.FormulaR1C1 = "R3"
Dim x As Long
For x = 2 To [C65536].End(xlUp).Row - 1
Range("h" & x + 1) = Log(Range("e" & x + 1) / Range("e" & x)) * 100
Next x
End Sub

Dans un exemple de 2019 sur les données Yahoo.finance les données manquantes sont désormais indiquées avec #N/A et plus avec null. Il faut donc les traiter avec une fonction VBA qui identifie le # N/A (isNA). Et comme j’ai décidé d’impressionner les étudiants avec un gros jeu de données un peu plus complexe, pour nettoyer correctement la base je suis obligé d’utiliser une double boucle qui balaie les lignes et les colonnes. Avec une boucle imbriquée on commence à se rendre compte de la puissance de la programmation. On commence à faire de l’informatique en fait.

Sub gros_nettoyage()
 For col = 1 To Range("B3").SpecialCells(xlCellTypeLastCell).Column
  For lig = Range("B3").SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
     If WorksheetFunction.IsNA(Cells(lig, col)) Then
     Rows(lig).Delete
     End If
  Next lig
 Next col
   
End Sub
Sub Ouvre()
 'Workbooks.Open Filename:="C:\Users\Mickael\Documents\l3 info\data_examen2019cc1.xlsx"
Workbooks("data_examen2019cc1.xlsx").Activate
'Sheets.Add.Name = "data_fin" 'ajoute une Feuille devant la Feuille active et la nomme "NouvelleFeuille"
Sheets.Add
    Range("a1").Select
    ActiveCell.FormulaR1C1 = "Date"
'Worksheets("data_fin").Activate
Range("b1").Select
    ActiveCell.FormulaR1C1 = "R3"
Range("c1").Select
    ActiveCell.FormulaR1C1 = "R31"
    Range("d1").Select
    ActiveCell.FormulaR1C1 = "R32"
    'Worksheets("Sheet1").Activate
Dim x As Long
For x = 3 To [Sheet1!C65536].End(xlUp).Row - 1
Range("a" & x - 1) = Range("Sheet1!a" & x + 1)
Range("b" & x - 1) = Log(Range("Sheet1!e" & x + 1) / Range("Sheet1!e" & x)) * 100
Range("c" & x - 1) = Log(Range("Sheet1!f" & x + 1) / Range("Sheet1!f" & x)) * 100
Range("d" & x - 1) = Log(Range("Sheet1!g" & x + 1) / Range("Sheet1!g" & x)) * 100


Next x
 ActiveWorkbook.SaveAs Filename:="C:\Users\Mickael\Documents\l3 info\data_examen2019cc11.xlsx", FileFormat:=51
  ActiveWorkbook.Close
End Sub

Reste plus qu’à réaliser un histogramme, et les tests d’aplatissement et d’asymétrie.

=KURTOSIS(‘CAC40’!H3:H6988) = 4,56

=COEFFICIENT.ASYMETRIE.P(‘CAC40’!H3:H6988) = -0,066

Maintenant, il faut faire la même chose avec SAS. Prochaine épisode.