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
je précise que mes requetes SQL Server sont déjà créer dans SQl server management Studio.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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!