Extraire Tableau Excel Vers serveur SQL Serveur 2008 R2
bonjour à vous
je viens vers vous pour chercher de l'aide à propos de la relation entre SQL serveur et Excel
je vous expose mon soucis
j'ai un fichier excel avec plusieurs feuilles.
j'ai un serveur SQL qui s'appelle OASIS - FTM - 1
une database qui se nomme LANGUAGE
et plusieurs tables dans cette database
j'ai réussi à me connecter à ce serveur avec une macro VBA
j'aimerai que ma macro VBA copie les données du tableau d'une feuille excel se nommant LANGUAGE_ANA_I et transfert les informations collées dans ma table de mon serveur SQL
j'ai codé ceci mais le code plante au niveau de l'envoie des données
Sub ADOExcelToSQLServer()
Dim Cn As ADODB.Connection
Dim ServerName, DatabaseName, TableName, UserID, Password As String
Dim rs As ADODB.Recordset
Dim RowCounter, StartRow, EndRow As Long
Dim ColCounter, NoOfField As Integer
Dim ws As Worksheet
Set rs = New ADODB.Recordset
ServerName = "OASIS-FTM-1"
DatabaseName = "LANGUAGE"
Table = "LANGUAGE.dbo.tab_ANA_I"
UserID = "sa"
Password = "BocO@sis@1"
Set ws = ThisWorkbook.Worksheets("LANGUAGE_ANA_I")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Ici on va crée la connexion
sConnString = "Provider=SQLOLEDB;Data Source=" & ServerName & ";Initial Catalog=LANGUAGE;User id = " & UserID & ";password = " & Password
Set Cn = New ADODB.Connection
Cn.Open sConnString
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'With Sheets("LANGUAGE_I_ANA")
' i = 2
' Do
' Valeur1 = Sheets("LANGUAGE_I_ANA").Cells(i, 1).Value
' Valeur2 = Sheets("LANGUAGE_I_ANA").Cells(i, 2).Value
' requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) " & _
' " VALUES('" & Valeur1 & "','" & Valeur2 & "')"
' Cn.Execute requete
' i = i + 1
' Loop While .Cells(i, 1) <> ""
'End With
'Cn.Close
'requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) " & _
" VALUES('"SELECT [TAG],[DESC] FROM Sheets('"LANGUAGE_I_ANA"')"')"
Cn.Execute "Insert INTO Table[(TAG[,DESC])"
& " SELECT TAG[,DESC] "
FROM ws
Cn.Close
End Sub
je planche dessus depuis 4 jours j'ai regardé des tutos ect ect mais je suis une vraie bille en SQL
merci à vous tous pour votre aide
ps : je tiens à préciser que j'ai poster le meme post sur un autre forum
merci encore à vous
Boudiou, mais tu fais n'importe quoi!
Tu ne peux pas mélanger dans une même requête un INSERT sur la base sql-server + un SELECT sur le fichier excel.
Et pourquoi ouvrir 2 fils de discussion pour le même problème??
Regarde ce que j'ai écris ici (avec fichier exemple fonctionnel) c'est pour une base mySql, mais le principe est le même
parce que le probleme est un peu différent
et j'ai marqué cela parce que sur des tutos ils marquait que des insert into select existe regarde
https://technet.microsoft.com/fr-fr/library/ms188263(v=sql.105).aspx
et ce code ci fonctionne une seule fois
connaîtrez tu le moyen de update des info au lieu de les copier coller ? car il fonctionne qu'une seule fois car il ne veut pas copier fois la même info
With Sheets("LANGUAGE_I_ANA").UsedRange
For i = 2 To .Rows.Count
Cn.Execute "Insert INTO ([TAG],[DESC]) Values ('" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "');"
Next
End With
Je persiste et je signe : tu ne pourra JAMAIS mélanger dans une même requête un INSERT sur la base sql-server + un SELECT sur le fichier excel
Tu ne peux pas ouvrir une connexion à la fois avec un driver Sql-server et avec un driver Excel => cf ligne :Cnx.Open "Driver={SQL Server}; ...
Une connexion est soit avec Sql-server soit avec excel, JAMAIS les 2 en même temps
Tant que tu mélangera tout et n'importe quoi dans ton code, ça ne marchera pas.
le soucis c'est que le programme fonctionne pour une utilisation et quand je parle du programme je parle de celui la
Sub ADOExcelToSQLServer()
Dim Cn As ADODB.Connection
Dim ServerName, DatabaseName, TableName, UserID, Password As String
Dim rs As ADODB.Recordset
Dim RowCounter, StartRow, EndRow As Long
Dim ColCounter, NoOfField As Integer
Dim ws As Worksheet
Dim Valeurs As String
Set rs = New ADODB.Recordset
ServerName = "OASIS-FTM-1"
DatabaseName = "LANGUAGE"
Table = "LANGUAGE.dbo.tab_ANA_I"
UserID = "sa"
Password = "BocO@sis@1"
Set ws = ThisWorkbook.Worksheets("LANGUAGE_ANA_I")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Ici on va crée la connexion
sConnString = "Provider=SQLOLEDB;Data Source=" & ServerName & ";Initial Catalog=LANGUAGE;User id = " & UserID & ";password = " & Password
Set Cn = New ADODB.Connection
Cn.Open sConnString
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With Sheets("LANGUAGE_ANA_I").UsedRange
For i = 2 To .Rows.Count
Cn.Execute "Insert INTO " & Table & "([TAG],[DESC]) Values ('" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "');"
Next
End With
Cn.Close
le soucis de ce code pour mon projet c'est que mes feuilles peuvent contenir X ligne et X colonnes donc petit soucis
et la première colonne est toujours primaire