Exportation tableau Excel vers SQL Serveur
bonjour à tous
je viens vers vous car étant débutant en VBA et SQL Server j'aimerai avoir des informations
je vous explique le projet :
j'ai dans un fichier excel plusieurs feuilles. j'aimerai envoyé le contenu de ces feuilles sur un serveur SQL
les feuilles sont composées de tableaux très simple ne comportant que du texte.
alors le serveur se nomme OASIS-FTM-1 et j'aimerai écrire la première de mes feuilles excel dans la table SQL qui se nomme dbo.tab_ANA_I
merci pour vos futures réponses
à bientot et merci d'avance
Bonjour,
A minima, et pour commencer, voici un code générique à compléter :
Sub Grevious88()
Dim Cnx As Object, requete As String
Set Cnx = CreateObject("ADODB.Connection")
Cnx.Provider = "MSDASQL"
Cnx.Open "Driver={SQL Server};Server=OASIS-FTM-1;Database=NomDeLaBase;" & _
"Uid=Login;Pwd=MotDePasse;"
requete = "INSERT INTO dbo.tab_ANA_I (champs1,champs2,...) VALUES ('valeur1','valeur2',...)"
Cnx.Execute requete
Cnx.Close
Set Cnx = Nothing
End Sub
Dans ce code :
* il faut bien sûr spécifier le "NomDeLaBase", ton "Login" et ton "MotDePasse",
* et compléter la requête SQL avec les bonnes info : soit le nom exact des champs de la table et les valeurs que tu va aller chercher dans ton fichier excel, par exemple 'valeur1' pourrait devenir un truc genre :
"'" & sheets("Feuil1").range("A2").value & "'"
(ici une valeur texte, donc entourée par des 'guillemets simples', une valeur numérique n'aura pas de guillemets)
L'idée ici est de faire un INSERT par ligne, pour plusieurs lignes il conviendrait d'ajouter une boucle qui va bien.
Pierre
merci beaucoup
je vais tester cela de suite
juste une question, je ne peut pas sélectionner toutes les cellules d'un coup et les balancer dans le serveur ??
re-bonjour
alors j'ai du coup codé ceci :
Sub Grevious88()
Dim Cnx As Object, requete As String
Dim valeur1, valeur2 As String
Set Cnx = CreateObject("ADODB.Connection")
Cnx.Provider = "MSDASQL"
Cnx.Open "Driver={SQL Server};Server=OASIS-FTM-1;Database=LANGUAGE;" & _
"Uid=sa;Pwd=BocO@sis@1;"
'Worksheets("LANGUAGE_I_ANA").Activate
'valeur1 = Cells(1, 1)
'valeur2 = Cells(1, 2)
requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) VALUES (" & 'Texte1','Texte2')"
Cnx.Execute requete
Cnx.Close
Set Cnx = Nothing
End Sub
le code fonctionne je me connecte comme il faut, mais j'ai un soucis, comment copier toutes les infos d'une feuille excel ?? je voulais au départ créer une boucle do while et exécuter ma requête à l’intérieur de cette boucle mais je pense pas que ce sois la solution à cause du trop grand nombre d’exécution de requête au sein de la boucle
comment puis - je faire pour tous copier dans le serveur SQL sans exécuter une centaine de fois ma requête
merci à toi
Ok,
Tu peux essayer la syntaxe suivante (sans garantie de bon résultat) :
requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) VALUES " & _
"('TexteA2','TexteB2')," & _
"('TexteA3','TexteB3')," & _
"('TexteA4','TexteB4')"
(avec virgule séparant chaque jeu de data)
Sinon, pour ma part je n'ai jamais rencontré de soucis pour répéter n fois une même requête d'insertion avec une bête boucle quelconque (genre 500 à 1000 lignes ça passe)
(je me demande si tu n'auras pas plus de problème avec la longueur de chaine d'une unique requête qu'avec une boucle)
Pierre
je vais essayé de faire ce code :
do while Sheets("LANGUAGE_I_ANA").Cells( i , 1 ) <> ""
Valeur1 = Cells( i , 1 )
Valeur1 = Cells( i , 2 )
i = i + 1
requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) VALUES ("Valeur1","Valeur2")
Cnx.Execute requete
Cnx.Close
Set Cnx = Nothing
qu'en pense tu ??
Plutôt comme ceci
with Sheets("LANGUAGE_I_ANA")
i = 2
Do
Valeur1 = .Cells(i, 1).value
Valeur2 = .Cells(i, 2).value
requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) " & _
" VALUES('" & Valeur1 & "','" & Valeur2 & "')"
Cnx.Execute requete
i = i + 1
Loop While .Cells(i, 1) <> ""
end with
Cnx.Close
Pierre
merci à toi je vais tester tous cel de suite
sinon connaîtrez tu une solution pour ne pas exécuter la requête x fois mais plutôt une seule fois ?
merci pour ton aide en tous cas
alors j'ai un soucis il me dit l'indice n’appartient pas a la sélection pour cette ligne with
Sheets("LANGUAGE_I_ANA") 'cette ligne est en erreur
i = 2
Do
Valeur1 = .Cells(i, 1).value
Valeur2 = .Cells(i, 2).value
requete = "INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC]) " & _
" VALUES('" & Valeur1 & "','" & Valeur2 & "')"
Cnx.Execute requete
i = i + 1
Loop While .Cells(i, 1) <> ""
end with
Cnx.Close
déjà c'est :
WITH Sheets("LANGUAGE_I_ANA")
après vérifie si ton onglet s'appelle bien LANGUAGE_I_ANA
oui excuse moi c'était un mauvais copier coller
oui elle s'appelle bien comme ceci je ne comprend pas
j'ai aussi essayé ceci :
INSERT INTO [LANGUAGE].[dbo].[tab_ANA_I] ([TAG],[DESC])
SELECT TAG,DESC
FROM Sheets("LANGUAGE_I_ANA")
mais ça ne fonctionne pas non plus :/ je suis vraiment une bille en SQL et j'ai du mal avec les syntaxe et la "ponctuation"
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