XL 2016 Connexion entre VBA-Excel et Mysql

Benam

XLDnaute Nouveau
Bonjour,
je suis débutant en informatique (programmation/base de données...)
Je souhaite établir une connexion entre mon fichier excel et la base donnée faite sur le MySQL workbench.

voila mon code :

'----------------------------------------------------------------------------------
Sub ADOExcelSQLServer()

Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

Server_Name = "127.0.0.1"
Database_Name = "base"
User_ID = "root"
Password = "m02pas"
SQLStr = "SELECT* FROM table01.base"

Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"

rs.Open SQLStr, Cn, adOpenStatic

With Worksheets("Feuil1").Range("a1:z500")
.ClearContents
.CopyFromRecordset rs
End With
'
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub

'----------------------------------------------------------------------------------

quand j'excecute le programme... ca beug
Screenshot_1.jpg
si j'ai bien comprit, apparement c'est un probleme d'ODBC...

J'ai verifié dans ma librairie de reference VBA, j'ai bien le microsoft activex data objects 2.8 library coché :
Screenshot_3.jpg
j'ai suivi un tuto sur internet; donc j'ai declaré sur l'administrateur de source de données ODBC ma base de donnée... mais peut etre j'etais pas jusqu'au bout dans ma demarche
Screenshot_4.jpg


j'avais essayé l'application MySQL for Excel pour etre sur que ma base de donnée est correcte. apparement tout va bien, j'arrive a faire des check-out check-in.
pouvez vous m'aidez SVP
merci d'avance.
 

Fichiers joints

tatiak

XLDnaute Barbatruc
Bonjour,

Pour ce type de besoin, j'écris plutôt un code de ce genre (sans avoir besoin d'activer de référence particulière) :
VB:
Option Explicit

Public Cnx As Object, Rst As Object


Sub Lire()
Dim Req As String, T As Variant

    On Error GoTo errhdlr
    Connect_MySql
    Req = "SELECT * FROM table01"
    Rst.Open Req, Cnx
    If Not (Rst.EOF And Rst.BOF) Then
        Rst.MoveFirst
        T = Rst.GetRows
        With Sheets("Feuil1")
            .UsedRange.ClearContents
            .Range("A1").Resize(UBound(T, 2) + 1, UBound(T, 1) + 1) = Application.Transpose(T)
        End With
    End If
    Close_Cnx
    Exit Sub
    
errhdlr:
    Close_Cnx
    MsgBox "Lire - Erreur " & Err.Number & vbCrLf & Err.Description
End Sub


Sub Connect_MySql(Optional x As Byte)
Dim Db As String

    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.Provider = "MSDASQL"
    Db = "DRIVER={MySQL ODBC 5.1 Driver};" & _
         "SERVER= 127.0.0.1;" & _
         "DATABASE= base;" & _
         "USER= root;" & _
         "PASSWORD= m02pas;" & _
         "Option=3"
    Cnx.Open Db
    Set Rst = CreateObject("ADODB.Recordset")
End Sub


Sub Close_Cnx(Optional x As Byte)
    On Error Resume Next
    If x > 0 Then Rst.Close
    Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
End Sub
 

tatiak

XLDnaute Barbatruc
Après vérif sur mes propres bases MySql : le code proposé est parfaitement fonctionnel depuis mon PC avec les bons identifiants (adresse du serveur, nom de la base, login, mot de passe et nom de la table)

=> Vérifie tes identifiants utilisés

nb : j'utilise ce code en routine tous les jours pour mes appli
Pierre
 

Benam

XLDnaute Nouveau
C'est bizarre, je ne comprends pas pourquoi ca ne marche pas.
pourtant tout est bon

Serveur : 127.0.0.1
port : 3306
Base de donnée : base
user : root
mot de passe : m02pas

j'ai egalement demarrer le mysql sur la liste des services de mon ordi (gestionnaire des taches)

excel version 2016
j'ai desintallé le connecteur installé par defaut et j'ai reinstallé la version que tu m'as envoyé
:
Screenshot_8.jpg

as tu une piste à explorer stp ?
merci d'avance
 

tatiak

XLDnaute Barbatruc
Vérifier la version du driver installé et référencé dans la ligne =>
VB:
Db = "DRIVER={MySQL ODBC 5.1 Driver};" & _
 

Benam

XLDnaute Nouveau
j'ai remplacé la ligne :
Db = "DRIVER={MySQL ODBC 5.1 Driver};" & _

par

Db = "DRIVER={MySQL ODBC 8.0 Driver};" & _

ca marche toujours pas.
 

Benam

XLDnaute Nouveau
j'ai désinstallé la version 8.0 et j'ai réinstallé la 5.1 que tu m'as envoyé.
toujours le même problème.

on est bien d'accord que mon programme VBA doit être fait dans un module ?
 

Fichiers joints

Benam

XLDnaute Nouveau
apparement il faut installer la version 32bits
vu la version excel dont je dispose est une 32bits

source :

par contre ca m'affiche

Screenshot_12.jpg
 

Fichiers joints

tatiak

XLDnaute Barbatruc
Pour info mon PC est sous Windows 10 64bits + Office 2016 32 bits + MySQL Connector/ODBC 5.1.13 32 bits

A vérifier :
* version du Mysql du serveur
* adresse du serveur. Nb : pour mon serveur de test (un très classique WAMP) l'adresse est "localhost"

Pierre
 
Dernière édition:

Benam

XLDnaute Nouveau
C'est bon ca marché... merci Tatiac :)
par contre il faut activé le Microsoft ActiveX DATA Objects 2.8 Library.
voila le code final qui marche pour moi :

VB:
Sub ADOExcelSQLServer2()

Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim Num As String



Server_Name = "127.0.0.1"
Database_Name = "base"
User_ID = "root"
Password = "m02pas"


Num = 1022

SQLStr = "SELECT numero FROM table01 WHERE numero LIKE '" & Num & "%'"


Set Cn = New ADODB.Connection
Cn.Open "Driver={MYSQL ODBC 8.0 Unicode Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";"
rs.Open SQLStr, Cn, adOpenStatic

With Worksheets("Feuil2").Range("a1:z500")
.ClearContents
.CopyFromRecordset rs
End With

rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing

End Sub
 

Discussions similaires


Haut Bas