Importation de données depuis SQLServer sur Excel

richert90

XLDnaute Occasionnel
Bonjour,
j'ai besoin de votre aide; sur VBA, savez-vous comment fait-t-on pour importer une base de données sur Excel de manière automatique. C'est à dire que quand l'utilisateur va cliquez sur un bouton (par exemple), il pourra choisir le serveur ( id, mot de passe) et la base de données sur SQLServer qu'il souhaite importer sur Excel?
J'ai trouver que ça comme piste sur internet:

'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection

'Définition de la chaîne de connexion
cnx.ConnectionString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"

'Ouverture de la base de données
cnx.Open


Mais la déclaration ne marche pas ("Erreur de compilation: Type défini par l'utilisateur non défini")

Merci d'avance
 

Orodreth

XLDnaute Impliqué
Re : Importation de données depuis SQLServer sur Excel

Bonjour,

Il manque la référence aux outils ADO.

Dans l'éditeur Visual Basic (raccourci clavier = Alt + F11), menu Outils / Référence.

Il faut cocher une ligne "Microsoft ActiveX Data Objects X.X Library" (de préférence, la dernière version listée)

/!\ La version 2010 d'Excel devrait être approchante, mais je ne garantis pas l'exactitude de la syntaxe.

Cordialement,
Orodreth
 

richert90

XLDnaute Occasionnel
Re : Importation de données depuis SQLServer sur Excel

En effet je l'ai cochée mais pour l'instruction:
cnx.ConnectionString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"
Il y a a une erreur d'exécution commE quoi [microsoft] [odbc sql sERVER dRIVER] [sHARED Memory] Ce serveur SQL n'existe pas ou son accès est refusé.
Il y a t-il une erreur dans le code??
Merci de m'aider
 

Orodreth

XLDnaute Impliqué
Re : Importation de données depuis SQLServer sur Excel

Re,

Difficile de répondre. La chaine de connexion m'a l'air bonne à priori, maintenant, j'ignore ce que tu mets dans tes variables donc ... difficile à dire.

Tu as vérifier les paramètres de connexion ?
Tu accèdes au serveur SQL depuis ton poste ?
 

richert90

XLDnaute Occasionnel
Re : Importation de données depuis SQLServer sur Excel

Moi j'ai juste mis ça dans un module:

'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection

'Définition de la chaîne de connexion
cnx.ConnectionString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"

'Ouverture de la base de données
cnx.Open


Peut -être que ça ne suffit pas si?
Parce que normalement avec cela, on devrait, en exécutant cette macro, tomber sur une fenêtre qui permet à l'utilisateur de choisir sa base de données ( et du coup son serveur,etc...)?
 

richert90

XLDnaute Occasionnel
Re : Importation de données depuis SQLServer sur Excel

J'ai oublié: Oui j'arrive, normalement, à importer une base depuis SQL Server .
Qu'est-ce que tu entends par paramètre de connexions? Parce que, la base je la prend sur un réseau a distance, mais ça a déjà marché ( sans faire de macro, juste comme ça)
 

Orodreth

XLDnaute Impliqué
Re : Importation de données depuis SQLServer sur Excel

Re,

En fait, je me demandais juste ce que tu avais dans tes variables.

Si je reprends ta chaine de connexion:
Code:
cnx.ConnectionString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"

Si je lis bien, tu as 4 variables:
NomUtilisateur
MotDePasse
NomServeur
NomBaseDeDonnées (tu devrais enlever l'accent d'ailleurs)

C'est peut-être un de ces 4 paramètres qui a une petite erreur ?

Sinon, essaye d'enregistrer une macro de ce que tu fais quand tu te connectes au serveur en question depuis Excel.
Ca te donnera des pistes au niveau du code.

Cordialement,
 

richert90

XLDnaute Occasionnel
Re : Importation de données depuis SQLServer sur Excel

Bonjour,

J'ai eu un nouveau message d'erreur "Erreur d’exécution 91: variable objet ou variable de bloc with non définie' "
Concernant les variables , j'ai enlevé l'accent comme tu m'as dit. Les variables je dois les déclarés comme ceci:?
Dim NomUtilisateur As String
Dim MotDePasse As String
Dim NomServeur As String
Dim NomBaseDeDonnees As String
Que je les déclare ou non, j'ai le même message d'erreur.

En faisant une macro, le code st vraiment très différent de celui-ci et j'accède directement à une table précise alors que je veux que l'utilisateur puisse avoir le choix de prendre la table qu'il veut.
 

richert90

XLDnaute Occasionnel
Re : Importation de données depuis SQLServer sur Excel

sub test()
'Déclaration de la variable de connexion
Dim cnx As ADODB.Connection
Set Cnx = New ADODB.Connection

'Définition de la chaîne de connexion

cnx.ConnectionString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"

'Ouverture de la base de données

cnx.Open

end sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re : Importation de données depuis SQLServer sur Excel

Bonjour Richert90, Orodreth, le Forum

Voici un exemple de ce que j'utilise pour faire des UPDATE en masse sur MS NAV / SQL Server sur une liste de Companies listée sur une Feuille du Classeur... (D'où la boucle) Et évidemment j'ai les Droits nécessaire sur mon Server SQL 2008R2 ou même 2012.

Code:
Option Explicit
Sub UPDATE_DIMENSION_ANALYTICAL_NON_OBLIGATOIRE() '<<<<<<<<<<<<<< !!!
Dim oConn As ADODB.Connection
Dim oRec As Object
Dim strDriver As String, _
    strServeur As String, _
    strDataBase As String, _
    strUid As String, _
    strPwd As String, _
    bceComp As String
    
Dim strQuery As String, _
    strCo As String
    
Dim MycoRange As Range, _
    Cell As Range
    

strDriver = "{SQL Server}" 'Driver pour l'accès MS SQL Server
strServeur = "TonNomdeServeurIci" 'SQL Server Name
strDataBase = "TonNomdeBaseIci"  ''Database Name
'strUid = "TOTO"'<<< Uniquement si DATABASE LOGIN, non-nécessaire si lancé depuis Compte Windows Login sur le server SQL
'strPwd = "xxxxx"

Set oConn = New ADODB.Connection
oConn.Open "Driver=" & strDriver & ";" & _
"Server=" & strServeur & ";" & _
"Database=" & strDataBase
'
'"Database=" & strDataBase & ";" & _ '<<< Uniquement si DATABASE LOGIN
'"Uid=" & strUid & ";" & _
'"Pwd=" & strPwd & ";"

With CO
Set MycoRange = .Range("A2:A" & .Range("A400").End(xlUp).Row)
End With
 
For Each Cell In MycoRange
      strCo = Cell.Text
  
                   
         strQuery = "UPDATE [" & strDataBase & "].[dbo].[" & strCo & "$Default Dimension]" & _
              "SET [Value Posting] = 0" & _
              "WHERE [Dimension Code] = 'ANALYTICAL TYPE' AND [Table ID] = '15' AND [Value Posting] = 1"
                    
                Debug.Print strQuery
                
                Set oRec = oConn.Execute(strQuery, adCmdText)
                
 Next Cell
oConn.Close
Set oConn = Nothing
Set oRec = Nothing
End Sub

Un autre exemple en SELECT qui sera plus ton cas : 5par contre là je suis en Windows Login sur le ServerSQL où j'ai les droits qui vont bien...

Code:
Sub COMPRESS_TEST()
Dim oConn As ADODB.Connection
Dim oRec As Object
Dim strDriver As String, _
    strServeur As String, _
    strDataBase As String
    
strDriver = "{SQL Server}"
strServeur = "TonNomDeServerSQL"
strDataBase = "TonNomDeDatabase"
Set oConn = New ADODB.Connection
oConn.Open "Driver=" & strDriver & ";" & _
"Server=" & strServeur & ";" & _
"Database=" & strDataBase
'

SQLStringA = "Select [Account Type], [Account No_], [Accounting Type Orig], [Accounting Code Orig], [Accounting Code], [Currency Code], SUM([Amount])  , SUM([Amount (LCY)]), COUNT([Amount (LCY)]) FROM [" & strDataBase & "].[dbo].[6000$Owner Distrib_ Ledger Entry]"
SQLStringB = " WHERE [Posting Date] BETWEEN '2008-01-01' AND '2009-12-31' GROUP BY [Account Type], [Account No_], [Accounting Type Orig], [Accounting Code Orig], [Accounting Code], [Currency Code] ORDER BY  [Account Type], [Account No_], [Accounting Type Orig], [Accounting Code Orig], [Accounting Code], [Currency Code];"

strMyQuery = SQLStringA & SQLStringB
Set oRec = oConn.Execute(strMyQuery, adCmdText)

Range("A3").CopyFromRecordset oRec
oConn.Close
Set oConn = Nothing
End Sub

Si celà peut t'aider..

@+Thierry
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA