Extraire Tableau Excel Vers serveur SQL Serveur 2008 R2

Y compris Power BI, Power Query et toute autre question en lien avec Excel
G
Grevious88
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 10 mars 2016
Version d'Excel : 2010

Message par Grevious88 » 25 avril 2016, 14:11

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
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 847
Appréciations reçues : 86
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 25 avril 2016, 15:31

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
G
Grevious88
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 10 mars 2016
Version d'Excel : 2010

Message par Grevious88 » 25 avril 2016, 15:39

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/lib ... .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
Avatar du membre
pierrep56
Membre dévoué
Membre dévoué
Messages : 847
Appréciations reçues : 86
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 25 avril 2016, 16:26

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.
G
Grevious88
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 10 mars 2016
Version d'Excel : 2010

Message par Grevious88 » 25 avril 2016, 16:31

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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message