Exécuter une requête SQL à partir d'une feuille Excel
Bonjour
Depuis quelques années, j'exécute des requêtes Access à partir d'une feuille Excel (cf code vba ci dessous). Et cela fonctionne à merveille.
Or depuis quelques temps, mes requêtes sont de plus en plus complexe et j'utilise donc non plus Access mais "SQl server management Studio" pour créer mes requêtes.
Or j'aimerais toujours pourvoir exécuter mes requêtes Sql à partir d'Excel mais mes connaissance ne sont pas aussi poussées.:(
Est il possible, de créer un code vba du même type que celui ci dessous où je ferais appelle non pas à une requête Access mais à une requête SQL Server :roll:
je précise que mes requetes SQL Server sont déjà créer dans SQl server management Studio.
Code:
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
| Sub test()
Dim sql As String
Dim GenereCSTRING As String
Dim Debut As Object
Dim Fin As Object
Dim Cm As Object 'Pour utiliser une requête parametrés il faut utiliser l'oblet Command!
Dim cn As Object 'Pour ce connecter à un base de données Access il faut utiliser l'objet Connection!
Dim rs As Object
Dim i As Integer
Sheets("feuil1").Select
sql = "SELECT * FROM requete" ' je détermine une requête sql qui pointe sur ta requête Acces."
Set cn = CreateObject("ADODB.Connection")
Set Cm = CreateObject("Adodb.Command")
'MsgBox ThisWorkbook.Path
GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=chemin\BaseDonnee_Access.accdb;;Persist Security Info=False" 'Je defini un chêne de texte qui contient les information de ma connection.
cn.Open GenereCSTRING 'J'ouvre ma connection.
Cm.CommandText = sql 'je passe ma requête à mon objet command
Cm.ActiveConnection = cn 'j'affecte ma connection à ma commande
Const adDate = 7 'defini le type de parametre
Set Debut = CreateObject("ADODB.Parameter")
Debut.Name = "debut": Debut.Type = adDate: Debut.Value = CDate(Format(ThisWorkbook.Sheets("feuil2").Range("B97").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Debut
Set Fin = CreateObject("ADODB.Parameter") 'c'est avec l'objet Parameter que je vais reseigner les parmetres de ma requête Access.
Fin.Name = "Fin": Fin.Type = adDate: Fin.Value = CDate(Format(ThisWorkbook.Sheets("Feuil2").Range("G97").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Fin
Set rs = Cm.Execute 'on recupere le résultat de la requête.
With ThisWorkbook.Sheets("Feuil1")
For i = 0 To rs.Fields.Count - 1 'On place le nom des champs sur la ligne 4 de ma feuille Excel
.Range("A1").Offset(0, i) = rs(i).Name
Next
.Range("A2").CopyFromRecordset rs 'la on copie le résultat de la requête! |