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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| 'déclaration des variables globales :
'dates définies par l'utilisateur
Public debut As Date
Public debut2 As Date
Public fin As Date
Public Sub main()
UserForm1.Show
'déclarations des variables
Dim cheminbdd As String
Dim mabdd As DAO.Database
Dim t_general(5, 41) As Variant
'Si besoin est, modifier la chemin de la base de donnée ici :
cheminbdd = "C:\Users\FABIEN\Desktop\projet vba\cotations.mdb"
Call ouverture(mabdd, cheminbdd)
Call requete_debut2(mabdd, debut, debut2)
'MsgBox debut
'MsgBox fin
'MsgBox debut2
'debut3 = Format(debut2, "dd/mm/yyyy")
'MsgBox debut3
'debut4 = Format(debut2, "mm/dd/yyyy")
'MsgBox debut4
Call requete_cours(mabdd, debut, debut2, fin, resultat)
Call tab_general(resultat, t_general)
End Sub
'Ouverture de la base de donnée'
Sub ouverture(mabdd, cheminbdd)
Set mabdd = OpenDatabase(cheminbdd)
End Sub
'On définit la date debut2 en vérifiant que celle ci est un jour ouvré.
'On effectue une requête qui permet de vérifier que c'est bel et bien
'un jour férié en basant sur le CAC40.
Public Sub requete_debut2(mabdd, debut, debut2)
Dim test_debut2 As String
Do
'il faut mettre la date en format francais pour que excel augmente bien de 1 jour
debut2 = Format(debut2, "dd/mm/yyyy")
debut2 = debut + 1
'il faut mettre la date en format américain pour access
debut2 = Format(debut2, "mm/dd/yyyy")
test_debut2 = "SELECT COTATIONS.DATE " & _
" FROM COTATIONS WHERE ((CODE_ISIN = 'FR0003500008')" & _
"AND (DATE='" & debut2 & "'));"
vtest = mabdd.CreateQueryDef("", test_debut2)
Loop Until (IsNull(vtest) = False)
'On peux maintenant mettre debut en format américain pour les requetes access futures
debut = Format(debut, "mm/dd/yyyy")
End Sub
'Requête permettant d'obtenir le cours initial(debut) et la moyenne
'des cours de clotûre de la période T (entre debut2 et fin)
Public Sub requete_cours(mabdd, debut, debut2, fin, resultat)
Dim rgeneral As String
rgeneral = "SELECT Nom, Cours.CodeISIN, Cours.Cours_Cloture, [CoursMoyen].Moyenne " & _
" FROM (SELECT Cac40.Nom, Cac40.Code_ISIN AS CodeISIN, Cours_Cloture " & _
" FROM CAC40 INNER JOIN COTATIONS " & _
" ON CAC40.Code_ISIN=Cotations.Code_ISIN " & _
" WHERE (Date=#" & debut & "#) " & _
" ORDER BY Cac40.Code_ISIN) AS COURS INNER JOIN (SELECT Code_ISIN, AVG(Cours_Cloture) AS Moyenne " & _
" FROM Cotations " & _
" WHERE (Date BETWEEN #" & debut2 & "# AND #" & fin & "# ) " & _
" GROUP BY COTATIONS.CODE_ISIN " & _
" ORDER BY COTATIONS.CODE_ISIN) AS CoursMoyen ON Cours.CodeISIN=[CoursMoyen].Code_ISIN " & _
" ORDER BY Cours.CodeISIN;"
Set vcours = mabdd.CreateQueryDef("", rgeneral)
' L' ERREUR EST SUR LA LIGNE SUIVANTE :
Set resultat = vcours.OpenRecordset
End Sub
Sub tab_general(resultat, t_general)
Dim max1 As Integer
resultat.MoveFirst
max1 = resultat.RecordCount
For i = 1 To max1
t_general(1, i) = resultat.Fields("Nom")
t_general(2, i) = resultat.Fields("CodeIsin")
t_general(3, i) = resultat.Fields("Cours_Cloture")
t_general(4, i) = resultat.Fields("Moyenne")
t_general(5, i) = ((t_general(4, i) - t_general(3, i)) / t_general(3, i))
resultat.MoveNext
Next i
For i = 1 To max1
For j = 1 To 5
Worksheets("Feuil1").Cells(i, j) = t_general(j, i)
Next j
Next i
End Sub |
Partager