Excel-VBA - Enregistrer des données dans une table MySql

Bonjour,

Je suis perdu car je ne connais pas ces fonctions ! si quelqu'un peut me donner un tuyau !!

En fait je veux insérer des enregistrements dans ma table MySql. La connexion fonctionne, je peux lire dans la table mais comment insérer ?

Merci pour l'aide.

Sub test_mysql()

        Dim connexion As String
        Dim strSQL As String
        Dim strChamp, strValeur As String
        Dim nrow As Integer
        Dim i As Integer

        ' Déclatration varibles
        Dim fam As String
        Dim desig As String
        Dim descrip As String
        Dim refe As String
        Dim picto As String
        Dim pv As Double
        Dim ppub As Double
        Dim sto As Integer
        Dim p8 As String
        Dim cfam As String
        Dim imag As String

        Sheets("Base Web").Select

        Set conn = CreateObject("ADODB.Connection")
        Set rec = CreateObject("ADODB.Recordset")

        connexion = "DRIVER={MySQL ODBC 8.0 ANSI Driver};"
        connexion = connexion + "DATABASE=maBase;"
        connexion = connexion + "SERVER=192.168.1.xx:3307;"
        connexion = connexion + "UID=xxx;"
        connexion = connexion + "PWD=xxx;"
        connexion = connexion + "OPTION=16386"

        conn.Open connexion

        SQLstring = "SELECT * FROM maTable"
        ' envoi du SQL vers la connexion
        rec.Open SQLstring, conn

        Set champ = rec.Fields
        ncol = champ.Count ' nombre de champs de la réponse

        nrow = Sheets("Base Web").UsedRange.Rows.Count

        For i = 2 To nrow

        strChamp = "id_Famille,id_Desig,id_Descrip,id_Ref,id_Desig,id_Picto,id_PV,id_Ppub,id_Stock,id_P8,id_CFam,id_Imge"
        strValeur = "fam,desig,descrip,refe,picto,pv,ppub,sto,p8,cfam,imag"
        strSQL = "Insert into maTable (id_Famille,id_Desig,id_Descrip,id_Ref,id_Desig,id_Picto,id_PV,id_Ppub,id_Stock,id_P8,id_CFam,id_Imge) values (fam,desig,descrip,refe,picto,pv,ppub,sto,p8,cfam,imag)"

        MySQL.Query (strSQL)

        Next i
        rec.Close
        Set rec = Nothing

        conn.Close
        Set conn = Nothing

End Sub

Bonjour,

ce qui m'étonne dans ton code, c'est que tu n'introduis pas de valeurs mais du texte, tu introduis avec ce code le texte fam et non la valeur de fam. Idem pour le reste.

strSQL = "Insert into maTable (id_Famille,id_Desig,id_Descrip,id_Ref,id_Desig,id_Picto,id_PV,id_Ppub,id_Stock,id_P8,id_CFam,id_Imge) values (fam,desig,descrip,refe,picto,pv,ppub,sto,p8,cfam,imag)"

En php on peut parfois écrire des valeurs tout en gardant les apostrophes globales, mais en VBA il faudrait quelque chose du type

"Insert ................................... values (" & fam & ","_________________________________)"

et encore ! il faudrait aussi peut-être doubler les guillements !

Fais d'abord et avant tout un debug.print strSQL et injecte le résultat dans phpmyadmin.

un exemple d'écriture de la requête ...

capture d ecran 739

Bonjour à tous,

Pour compléter la réponse de l'ami Steelson, pour un INSERT :

* les valeurs numériques entières => sans guillemets

* les valeurs numériques décimales => sans guillemets avec remplacement de la virgule par un point

* les valeurs 'texte' => entourées de guillemets simples. Et si la valeur 'texte' contient un guillemet => doubler le guillemet

Soit par exemple :

strSQL = "INSERT INTO maTable (`Id`, `Nom du navigateur`, `Somme`) VALUES (4,'Armel le Cleac''h', 120.50)

Nb : les noms des champs sont entourés par des guillemets-du-7 (Alt-GR+7 2 fois), les valeurs textes par des guillemets-du-4

Pierre

Merci pour votre aide. En fait j'avais un problème de syntaxe sur la chaîne SQLstring.

SQLstring = "INSERT INTO `Casselin` (`id_Famille`, `id_Desig`, `id_Descrip`, `id_Ref`, `id_Picto`, `id_PV`, `id_Ppub`, `id_Stock`, `id_P8`, `id_CFam`, `id_Image`) VALUES ('" & _
                Sheets("Base Web").Cells(i, 1) & "', '" & _
                Sheets("Base Web").Cells(i, 2) & "', '" & _
                Sheets("Base Web").Cells(i, 3) & "', '" & _
                Sheets("Base Web").Cells(i, 4) & "', '" & _
                Sheets("Base Web").Cells(i, 5) & "', '" & _
                Sheets("Base Web").Cells(i, 6) & "', '" & _
                Sheets("Base Web").Cells(i, 7) & "', '" & _
                Sheets("Base Web").Cells(i, 8) & "', '" & _
                Sheets("Base Web").Cells(i, 9) & "', '" & _
                Sheets("Base Web").Cells(i, 10) & "', '" & _
                Sheets("Base Web").Cells(i, 11) & "\r\n');"
conn.Execute SQLstring

Encore merci à tous

Re Bonjour,

J'ai toujours un problème avec cette fonction ! .

Len(SQLstring) m'indique 652 caractères alors que la chaine fait 247 !? je comprends rien !!!

La chaine est coupée

"INSERT INTO `maTable` (`id_Famille`, `id_Desig`, `id_Descrip`, `id_Ref`, `id_Picto`, `id_PV`, `id_Ppub`, `id_Stock`, `id_P8`, `id_CFam`, `id_Image`) VALUES ('Cuisson', 'Four à convection', '• Acier Inox 18/10• Cuve emboutie• Aspiration extérieure

Mon code

Dim SQLstring As String

SQLstring = "TRUNCATE TABLE `maTable`;"
conn.Execute SQLstring

SQLstring = ""
SQLstring = "INSERT INTO `Casselin` (`id_Famille`, `id_Desig`, `id_Descrip`, `id_Ref`, `id_Picto`, `id_PV`, `id_Ppub`, `id_Stock`, `id_P8`, `id_CFam`, `id_Image`) VALUES ('" & _
                Sheets("Base Web").Cells(i, 1) & "', '" & _
                Sheets("Base Web").Cells(i, 2) & "', '" & _
                Sheets("Base Web").Cells(i, 3) & "', '" & _
                Sheets("Base Web").Cells(i, 4) & "', '" & _
                Sheets("Base Web").Cells(i, 5) & "', '" & _
                Sheets("Base Web").Cells(i, 6) & "', '" & _
                Sheets("Base Web").Cells(i, 7) & "', '" & _
                Sheets("Base Web").Cells(i, 8) & "', '" & _
                Sheets("Base Web").Cells(i, 9) & "', '" & _
                Sheets("Base Web").Cells(i, 10) & "', '" & _
                Sheets("Base Web").Cells(i, 11) & "\r\n');"

Z = Len(SQLstring)
                conn.Execute SQLstring

Une idée à me soumettre ?

Merci pour l'aide

Cdlt

Je joins le fichier utilisé

Pour tester faudra remplacer les infos de connexion

20test-mysql.xlsm (23.20 Ko)

Bonjour,

D'abord, essaie de remplacer ` par ' dans la syntaxe ... dans certains logiciels, le fait de rencontrer un caractère dont le code ascii est > 127 fait tout passer en unicode 16 ou 32bits. Et si tu peux aussi remplacer ce caractère

En C3 tu as déjà 395 caractères !

Merci Steelson pour la réponse

j'ai bien remplacé les caractères mais c'est le même résultat !

Ce que je comprends pas c'est que Len(SQLstring) me renvoie bien 641 carractères mais au final SQLstring est tronquée à 247 caractères

SQLstring renvoie : "INSERT INTO 'maTable' ('id_Famille', 'id_Desig', 'id_Descrip', 'id_Ref', 'id_Picto', 'id_PV', 'id_Ppub', 'id_Stock', 'id_P8', 'id_CFam', 'id_Image') VALUES ('Cuisson', 'Four à convection', '- Acier Inox 18/10- Cuve emboutie- Aspiration extérieure ou

pour tester j'ai mis un MsgBox SQLstring et là j'ai bien ma chaine entière !!

msgbox1

Ca viendrait pas de --> conn.Execute SQLstring ?

Merci Steelson pour la réponse

j'ai bien remplacé les caractères mais c'est le même résultat !

Ce que je comprends pas c'est que Len(SQLstring) me renvoie bien 641 carractères mais au final SQLstring est tronquée à 247 caractères

SQLstring renvoie : "INSERT INTO 'maTable' ('id_Famille', 'id_Desig', 'id_Descrip', 'id_Ref', 'id_Picto', 'id_PV', 'id_Ppub', 'id_Stock', 'id_P8', 'id_CFam', 'id_Image') VALUES ('Cuisson', 'Four à convection', '- Acier Inox 18/10- Cuve emboutie- Aspiration extérieure ou

ok je n'avais pas compris ! désolé

il vaut mieux attendre l'avis de Pierre

Bonjour à tous

La solution que j'ai trouvé est:

Sheets("Feuil1").Cells(i, 3).Value = Replace(Sheets("Feuil1").Cells(i, 3).Value, Chr(10), Chr(13))
Sheets("Feuil1").Cells(i, 3).Value = Replace(Sheets("Feuil1").Cells(i, 3).Value, Chr(13), "")

Merci pour l'aide !!

Génial ce Forum

Cdlt

En effet ! merci pour ce retour, fallait y penser ne effet que le retour chariot pouvait entraver la séquence envoyée !

Rechercher des sujets similaires à "vba enregistrer donnees table mysql"