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
| Sub TEST()
'Dans la sub principale, nous allons gérer les informations au niveau du classeur ;
'La connexion à la base de données ainsi que le passage des plages de date à la méthode
'qui génère le tableau !
Dim Cn as Object
Set Cn = CreateObject("ADODB.Connection")
GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rdurupt\Documents\Données1.accdb;" 'Je defini un chêne de texte qui contient les information de ma connection.
Cn.Open GenereCSTRING 'J'ouvre ma connection.
EnrichiTableau "01/01/2014", "31/12/2014", Cn, ThisWorkbook.Sheets("MaFeuilleResultat").Range("C1")
EnrichiTableau "01/01/2015", "31/12/2015", Cn, ThisWorkbook.Sheets("MaFeuilleResultat").Range("L1")
EnrichiTableau "01/01/2016", "31/12/2016", Cn, ThisWorkbook.Sheets("MaFeuilleResultat").Range("U1")
Cn.Close: Set Cn = Nothing
End Sub
Sub EnrichiTableau(DDebut As String, DFin As String, Cn As Object, Cellule As Range)
'Ici on va gérer la création du tableau, sens nous soucier de sa position !
'Comme dans la version initiale sauf ;
'Que nous travaillerons en position relative à la cellule passée en paramètre !
Dim Rs As Object, L As Integer
Set Rs = RetournRs(DDebut, DFin, Cn) 'on recupere le résultat de la requête.
If Rs.EOF = False Then
Cellule = "Date début": Cellule.Offset(0, 1) = Format(DDebut, "YYYY-MM-DD")
Cellule.Offset(0, 2) = "Date fin": Cellule.Offset(0, 3) = Format(DFin, "YYYY-MM-DD")
L = L + 1
For I = 0 To Rs.Fields.Count - 1 'On place le nom des champs sur la ligne 1 de ma feuille Excel
Cellule.Offset(L, I) = Rs(I).Name
Next
L = L + 1
Cellule.Offset(L).CopyFromRecordset Rs 'la on copie le résultat de la requête!
End If
End Sub
Function RetournRs(DDebut As String, DFin As String, Cn As Object) As Object
'Ici nous retrouvons notre requête initiale à la différence quelle
'est maintenant autonome encapsulé dans une fonction qui lui donne en paramètre
'la plage de date considéré et retourne le résultat de la requête !
Dim Sql As String
Dim Cm As Object 'Pour utiliser une requête parametrés il faut utiliser l'oblet Command!
Set Cm = CreateObject("Adodb.Command")
Cm.CommandText = Sql 'je passe ma requête à mon objet command
Cm.ActiveConnection = Cn 'j'affecte ma connection à ma commande
Const adDate = 7
'c'est avec l'objet Parameter que je vais renseinger les parmetres de ma requête Access.
'Cellule où est stokcé la date cdate(format(ThisWorkbook.Sheets("MaFeuilleConfig").range("A1").value,"yyyy-mm-dd"))
Set Debut = CreateObject("ADODB.Parameter")
Debut.Name = "debut": Debut.Type = adDate: Debut.Value = CDate(Format(DDebut, "yyyy-mm-dd")): Cm.Parameters.Append Debut
Set Fin = CreateObject("ADODB.Parameter") 'c'est avec l'objet Parameter que je vais resenger les parmetres de ma requête Access.
Fin.Name = "Fin": Fin.Type = adDate: Fin.Value = CDate(Format(DFin, "yyyy-mm-dd")): Cm.Parameters.Append Fin
Set RetournRs = Cm.Execute 'on recupere le résultat de la requête.
End Function |
Partager