Vous trouverez ci-dessous le code que j'utilise actuellement pour extraire des données d'un MS SQL Server 2008 vers VBA. Vous devez vous assurer que vous disposez de la bonne référence ADODB [Éditeur VBA->Outils->Références ] et assurez-vous que vous disposez de la bibliothèque Microsoft ActiveX Data Objects 2.8 cochée, qui est la deuxième à partir de la ligne du bas qui est cochée (j'utilise Excel 2010 sur Windows 7 ; vous pouvez avoir une version ActiveX légèrement différente, mais elle commencera toujours par Microsoft ActiveX) :
Sous-module de connexion à MS SQL avec hôte distant et nom d'utilisateur/mot de passe
Sub Download_Standard_BOM()
'Initializes variables
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQuery As String
'Setup the connection string for accessing MS SQL database
'Make sure to change:
'1: PASSWORD
'2: USERNAME
'3: REMOTE_IP_ADDRESS
'4: DATABASE
ConnectionString = "Provider=SQLOLEDB.1;Password=PASSWORD;Persist Security Info=True;User ID=USERNAME;Data Source=REMOTE_IP_ADDRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DATABASE"
'Opens connection to the database
cnn.Open ConnectionString
'Timeout error in seconds for executing the entire query; this will run for 15 minutes before VBA timesout, but your database might timeout before this value
cnn.CommandTimeout = 900
'This is your actual MS SQL query that you need to run; you should check this query first using a more robust SQL editor (such as HeidiSQL) to ensure your query is valid
StrQuery = "SELECT TOP 10 * FROM tbl_table"
'Performs the actual query
rst.Open StrQuery, cnn
'Dumps all the results from the StrQuery into cell A2 of the first sheet in the active workbook
Sheets(1).Range("A2").CopyFromRecordset rst
End Sub