IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Extraire Tableau Excel Vers serveur SQL Serveur 2008 R2 [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 96
    Par défaut Extraire Tableau Excel Vers serveur SQL Serveur 2008 R2
    salut à tous les developpez
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
     
    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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Valeurs As String
    With Sheets("LANGUAGE_I_ANA").UsedRange
        For i = 2 To .Rows.Count
            If Valeurs = "" Then Valeurs = "'" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "')" Else Valeurs = Valeurs & ",('" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "')"
        Next
    End With
    Cn.Execute "Insert INTO Table[(TAG[,DESC]) Values " & Valeurs

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 96
    Par défaut
    merci à toi je regarde cela de suite
    une question tu ne met pas de .close ??

    j'ai tester comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    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_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"')"')"
     
     
     
    With Sheets("LANGUAGE_I_ANA").UsedRange
        For i = 2 To .Rows.Count
            If Valeurs = "" Then Valeurs = "'" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "')" Else Valeurs = Valeurs & ",('" & .Cells(i, 1).Value & "','" & .Cells(i, 2).Value & "')"
        Next
    End With
    Cn.Execute "Insert INTO Table[(TAG[,DESC]) Values " & Valeurs
     
    Cn.Close
     
     
    End Sub
    mais il me dit syntaxe incorrect vers le mot clé table

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Ta requête sql est pas bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cn.Execute "Insert INTO " & Table[(TAG[,DESC]) & " Values( " & Valeurs & ")"
    Il faut respecter la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     INSERT INTO table_name
    VALUES (value1,value2,value3,...);
     
    Ou bien
     
    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 96
    Par défaut
    il me dit qu'il manque une paranthèse fermante? je ne vois pas ou

  6. #6
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Mets un point d'arrêt sur la ligne.
    Copie le sql.
    Dans la fenêtre exécution fait coller du sql et exécute
    et vois le résultat si correct

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 96
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    Ta requête sql est pas bonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cn.Execute "Insert INTO " & Table[(TAG[,DESC]) & " Values( " & Valeurs & ")"
    Il faut respecter la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     INSERT INTO table_name
    VALUES (value1,value2,value3,...);
     
    Ou bien
     
    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);
    j'ai essayé mais je n'arrive pas à remplacer les valeurs comme il faut :/ avec tous ces ; ' [ ect ect

    j'ai essayé comme ceci : Cn.execute "INSERT INTO" & Table & "Values("&Valeurs&")"

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "Insert INTO " & Table & "([Tag], [DESC]) Values( " & Valeurs & ")"
    Attention: si ([Tag] et [DESC] sont bien 2 colonnes de la Table, la variable Valeurs doit fournir
    2 valeurs pour ces 2 colonnes! Pas une de plus, pas une de moins!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/08/2011, 13h33
  2. Réponses: 1
    Dernier message: 28/02/2011, 11h06
  3. Première utilisation de SQL Serveur (SQL Serveur Express 2005)
    Par winux32 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/03/2009, 14h40
  4. inserer donnée fichier csv vers MS SQL Serveur
    Par bibikool dans le forum Développement
    Réponses: 2
    Dernier message: 11/07/2008, 15h16
  5. [Visual studio 2008 ](C#) liste serveur sql serveur
    Par nabil1 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/04/2008, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo