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

Rechercher des sujets similaires à "exportation tableau sql serveur"