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 :

Erreur 13 Excel, textbox et SQL [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut Erreur 13 Excel, textbox et SQL
    Bonjour,

    Je n'ai toujours pas de solution à mon problème, malgré mes recherches et mes essais.

    Je veux importer le contenu d'un textbox multiligne dans une table SQL; le hic, c'est qu'excel retourne une erreur 13 (types incompatibles)

    Cela semble se produire s'il y a un ou plusieurs saut(s) de ligne(s), et/ou si le nombre de caractères de textbox dépasse les 50 ... Mais avec tous les tests effectués, cela semble aléatoire.

    Le maxlenght de mon textbox, et le champ correspondant dans la table ont la même valeur : 8000 (pour les tests).

    voici la requête :

    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
     
    "INSERT INTO [tv4].[dbo].[VncConnection]" & Chr(13) & "" & Chr(10) & _
                "([TV_ID]" & Chr(13) & "" & Chr(10) & _
                ",[TV_MAINTENEUR]" & Chr(13) & "" & Chr(10) & _
                ",[TV_START]" & Chr(13) & "" & Chr(10) & _
                ",[TV_END]" & Chr(13) & "" & Chr(10) & _
                ",[TV_NOTES]" & Chr(13) & "" & Chr(10) & _
                ",[TV_DUREE])" & Chr(13) & "" & Chr(10) & _
            " VALUES" & Chr(13) & "" & Chr(10) & _
                "('" & VncId & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncMainteneur & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncStart & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncEnd & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncNotes & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncDuree & "')"
    Les chr, qu'ils soient présents ou non ne changent rien à l'affaire....

    Et la struture de la table


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ID,int
    TV_ID,varchar(50)
    TV_MAINTENEUR,varchar(50)
    TV_START,datetime
    TV_END,datetime
    TV_NOTES,varchar(8000)
    TV_DUREE,datetime
    Merci d'avance pour votre aide ...

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    La plupart du temps l'erreur 13 provient d'un problème de décimal.

    Par défaut windows utilise la virgule comme symbole décimal alors que le SQL (anglosaxon) utilise le point.

    Vérifie si tes variables retournent des virgule ou des points

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Merci pour la réponse et l'info. Je n'avais pas pensé à ça.

    Hélas, aucune virgule ni point dans mes variables. (j'affiche la requête à l'écran pour contrôle)

    ...

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    As tu essayer d'afficher la requete dans le debug, la copier et l'exécuter dans le gestionnaire de BDD

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Oui, c'est l'un des tous premiers tests que j'ai essayé devant cette fochue erreur 13 ...

    Cela fonctionne parfaitement, quel que soit le nombre de caractères, qu'il y ait des sauts de ligne ou non ...


  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Peux tu nous poster la requete pour avoir plus d'info

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Bien sûr :

    La requête telle qu'elle est générée dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "INSERT INTO [tv4].[dbo].[VncConnection]([TV_ID],[TV_MAINTENEUR],[TV_START],[TV_END],[TV_NOTES],[TV_DUREE]) VALUES('" & VncId & "','" & VncMainteneur & "','" & VncStart & "','" & VncEnd & "','" & VncNotes & "','" & VncDuree & "')"
    La requête envoyée après validation du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    "INSERT INTO [tv4].[dbo].[VncConnection]([TV_ID],[TV_MAINTENEUR],[TV_START],[TV_END],[TV_NOTES],[TV_DUREE]) VALUES('15','Jean DUPONT','08/12/2009 13:26:29','08/12/2009 13:26:45','hjkhgjkhgùkghlkùghlkùghlkùghlkùmghlkùmghjlkùmhglkùhglkùmhjlkùmghlkùghmjkl
    ghjkhgjkhgjkghkghklghmjklghklùghklùhgjk
    hjkhjùkmh*jkm*hùjmkh*ùjk
    jjj
     
    jj
     
    jj
    ','00:00:16')"
    Cette même requete, exécutée depuis le SQL serveur Management fonctionne parfaitement, quel que soit le contenu de VncNotes !

    J'ai également essayé de remplacer les sauts de lignes par des chr ... en vain. Mais là n'est pas le problème, car une simple chaîne un peu longue génère la même erreur.

    J'ai essayé d'envoyer la requête en deux temps :
    Les infos de base, puis un update qui met à jour TV_NOTES ... idem ...

    Une requête SQL depuis excel est-elle limitée en longueur ???

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Je vois que VNCID est entre apostrophe, il faudrait les retirer

    A part ca je ne vois rien d'anormal, peux tu nous afficher le code jusqu'a ligne qui genere l'erreur 13

  9. #9
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Voilà le fameux code ...

    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
    54
    55
    56
    57
    58
    59
    60
     
    Private Sub CommandButton3_Click()
     On Error GoTo errorHandler
     
        Sheets("Clients").Select
        VncId = Range("e2").Value
        VncMainteneur = NewSessionVnc.ComboBox1.Value
        Sheets("Temp").Select
        VncStart = Range("R21").Value
        VncEnd = Range("R19").Value
        VncDuree = Range("S21").Value
        VncNotes = NewSessionVnc.TextBox3.Value
     
        With ActiveSheet.QueryTables.Add(Connection:= _
            "ODBC;DRIVER=SQL Server;SERVER=200.200.200.1;UID=adminsa;PWD=lepasswordsa;APP=Microsoft Office 2003;WSID=PCXP;DATABASE=tv4" _
            , Destination:=Range("$I1"))
            .CommandText = Array( _
            "INSERT INTO [tv4].[dbo].[VncConnection]" & Chr(13) & "" & Chr(10) & _
                "([TV_ID]" & Chr(13) & "" & Chr(10) & _
                ",[TV_MAINTENEUR]" & Chr(13) & "" & Chr(10) & _
                ",[TV_START]" & Chr(13) & "" & Chr(10) & _
                ",[TV_END]" & Chr(13) & "" & Chr(10) & _
                ",[TV_NOTES]" & Chr(13) & "" & Chr(10) & _
                ",[TV_DUREE])" & Chr(13) & "" & Chr(10) & _
            " VALUES" & Chr(13) & "" & Chr(10) & _
                "('" & VncId & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncMainteneur & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncStart & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncEnd & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncNotes & "'" & Chr(13) & "" & Chr(10) & _
                ",'" & VncDuree & "')")
            .Name = "Requete tva connection_1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = True
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=True
        End With
     
    errorHandler:
        'indique le numéro et la description de l'erreur survenue
        If Err.Number = 0 Then
            MsgBox ("La session a été enregistrée.")
            Sheets("Calcul").Select
            Unload Me
        Else
            MsgBox ("Une erreur est survenue !" & Chr(10) & "Erreur : " & Err.Number & " ( " & Err.Description & " ) ")
            Sheets("Calcul").Select
            Unload Me
        End If
     
    End Sub

  10. #10
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bah la je suis étonné que l'on puisse faire un insert avec un QueryTables.

    Je n'utilise pas cette méthode pour accéder ou manipuler les données d'une BDD.

    Exemple :

    Ajouter la référence Microsoft Activex Data Objects 2.1 Library
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim cnn As Connection
    Dim StrSQL As String
     
     
    cnn.Open "ODBC;DRIVER=SQL Server;SERVER=200.200.200.1;UID=adminsa;PWD=lepasswordsa;APP=Microsoft Office 2003;WSID=PCXP;DATABASE=tv4"
     
    StrSQL = "insert ......"
     
     
    cnn.Execute cnn
     
    cnn.Close
    Set cnn = Nothing

  11. #11
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Avec cette méthode, que je découvre, j'obtiens une erreur :

    Type défini par l'utilisateur non défini

    Je dispose à l'instant d'un office 2003, je testerai ce soir avec un office 2007

    Effectivement dans Visual Editor, si je tape
    la proprité "Connection" n'existe pas ... Faut-il installer des outils supplémentaires ? Je suis en train de regarder ça sur le site de Microsoft ...

    Merci pour votre aide !

  12. #12
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Oups excuses, j'ai oublié un truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cnn As New ADODB.Connection

  13. #13
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Aucun problème ! Difficile d'être partout à la fois ...

    Mais un autre souci :

    la méthode (ou propriété ?) ADODB n'est pas disponible.

    Même message que précédemment ...

  14. #14
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Il te faut aller dans le menu outils / references et ajouter

    Microsoft Activex Data Objects 2.1 Library

  15. #15
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    J'avais oublié cette manip, désolé !

    Hélas, le problème se décale :

    avec cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim cnn As New ADODB.Connection
        Dim StrSQL As String
     
        cnn.Open "DRIVER={SQL Server};SERVER=200.200.200.1;UID=ladminsasa;PWD=lepasswordsa;DATABASE=tv4"
        StrSQL = "INSERT INTO [tv4lse].[dbo].[VncConnection]([TV_ID],[TV_MAINTENEUR],[TV_START],[TV_END],[TV_NOTES],[TV_DUREE]) VALUES('" & VncID & "','" & VncMainteneur & "','" & VncStart & "','" & VncEnd & "','" & VncNotes & "','" & VncDuree & "')"""
     
        cnn.Execute cnn
        cnn.Close
        Set cnn = Nothing
    J'obtiens ce message :

    Erreur -2147217900 ([Microsoft][ODBC Sql Server Driver][Sql Server]Syntaxe incorrecte vers '='.)

    J'ai fait une recherche sur .open, et à priori, la chaîne saisie me semble correcte ...

  16. #16
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    essai cette chaine pour la connexion

    Provider=SQLOLEDB;Server=200.200.200.1;Database=Mothra;UID=jsmith;
    PWD=orlando8

  17. #17
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Je suis désolé, mais l'erreur persiste ... Syntaxe incorrecte vers '='. ...

    j'essaie moult chaînes, sans succès.
    la requête générée est correcte ...

  18. #18
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    J'utilise plutot des connexions ODBC mais essai cette chaine de connexion

    oConn.Open "Provider=sqloledb;" & _
    "Data Source=myServerName;" & _
    "Initial Catalog=myDatabaseName;" & _
    "User Id=myUsername;" & _
    "Password=myPassword"

    Adresse d'un site une grand variete de connexion
    http://www.carlprothman.net/Default....erForSQLServer

  19. #19
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Bonjour,

    Jespère que je vais parvenir à poster cette réponse, car j'ai des trucs bizarres avec l'authentification ...

    Alors comme hier soir, et suite à ton post, aucune chaîne de connexion ne semblait fonctionner, j'ai posé des commentaires et des msgbox partout dans le code, et je me suis rendu compte qu'une erreur pourtant évidente était sous mes yeux.

    Tu m'as posté ce bout de code que j'ai recopié et adapté sans grande visibilité parce que je ne connaissais pas cette méthode :

    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
    Dim cnn As New ADODB.Connection
    Dim StrSQL As String
    
    cnn.Open "Provider=sqloledb;" & _
         "Data Source=200.200.200.1;" & _
         "Initial Catalog=tv4;" & _
         "User Id=l_adminsa;" & _
         "Password=lepasswordsa"
    
    StrSQL = "INSERT INTO VncConnection (TV_ID,TV_MAINTENEUR,TV_START,TV_END,TV_NOTES,TV_DUREE) VALUES('" & VncID & "','" & VncMainteneur & "','" & VncStart & "','" & VncEnd & "','" & VncNotes & "','" & VncDuree & "')"
             
    cnn.Execute cnn
    cnn.Close
    set cnn = Nothing
    Et bien sûr, la requête n'est jamais lancée ... Honte à moi !

    Alors je l'ai modifié ainsi :

    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
    Dim cnn As New ADODB.Connection
    Dim StrSQL As String
    
    cnn.Open "Provider=sqloledb;" & _
         "Data Source=200.200.200.1;" & _
         "Initial Catalog=tv4;" & _
         "User Id=l_adminsa;" & _
         "Password=lepasswordsa"
    
    StrSQL = "INSERT INTO VncConnection (TV_ID,TV_MAINTENEUR,TV_START,TV_END,TV_NOTES,TV_DUREE) VALUES('" & VncID & "','" & VncMainteneur & "','" & VncStart & "','" & VncEnd & "','" & VncNotes & "','" & VncDuree & "')"
             
    cnn.Execute StrSQL
    cnn.Close
    set cnn = Nothing
    Et là, ça va beaucoup mieux !

    D'abord, la connexion SQL se fait, et bien plus rapidement !
    Ensuite, le problème initial de saut de ligne et de nombre de caractère semble règlé.

    Je fais donc d'autres tests pour m'assurer que ça fonctionne effectivement normalement, et avec grand plaisir, je classerai ce post comme résolu !

  20. #20
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Tout cela fonctionne parfaitement ! Ce problème est donc règlé !

    Alors hop, un ptit coup de Résolu, et un grand merci à Jérôme, pour sa patience et son aide précieuse !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VBA-E+SQL] Message d'erreur et excel qui plante
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/02/2006, 16h28
  2. Erreur de connexion à une BDD SQL Server 2000 avec BDE
    Par SchpatziBreizh dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2005, 11h22
  3. Erreur de connexion au serveur SQL 3
    Par NeHuS dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/01/2005, 13h55
  4. erreur ASP/ Excel
    Par MASSAKA dans le forum ASP
    Réponses: 7
    Dernier message: 25/10/2004, 15h49
  5. Convertir une date au format excel en datetime SQL server
    Par ALLB dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 20/07/2004, 11h28

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