Publicité
Tatiak
6 avril 2014

Interroger une base MySql depuis Excel (VBA) - 1/2

Pour certaines applications, il est souhaitable de pouvoir interagir avec une base MySQL depuis un document Excel.

Pour ce faire, la première chose à faire est d'installer le Connector/ODBC :
sur la page : Download CConnector/ODB
prendre la version qui correspond à la configuration du PC (version atuelle 5.1.13), puis double-clic sur le .msi pour installer la DLL.

Pour la démo, une base simple à 1 table est crée sous phpMyAdmin :

CREATE DATABASE IF NOT EXISTS `vbamysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `vbamysql`;
CREATE TABLE IF NOT EXISTS `voitures` (
  `id` INTEGER NOT NULL auto_increment,
  `marque` VARCHAR(25) NOT NULL,
  `modele` VARCHAR(25) NOT NULL ,
  `cv` INTEGER,
  PRIMARY KEY (`id`),
  UNIQUE (`modele`)
) ENGINE = InnoDB ;

 

Sous Excel, on active la référence : Microsoft ActiveX Data Objects 2.8 Library

Ensuite on se crée un script de connection (qui prend ici en compte les info de l'onglet config) :
(on aura déclaré, bien sûr avant : Public oConnect As ADODB.Connection)

Private Sub ConnectionDB()
Dim S As String
    Set oConnect = New ADODB.Connection
    S = "DRIVER={MySQL ODBC 5.1 Driver};" & _
        "SERVER=" & Sheets("config").Range("B1").Text & ";" & _
        "DATABASE=" & Sheets("config").Range("B2").Text & ";" & _
        "USER=" & Sheets("config").Range("B3").Text & ";" & _
        "PASSWORD=" & Sheets("config").Range("B4").Text & ";" & _
        "Option=3"
    oConnect.Open S
End Sub

 

Pour remplir la table "voitures", un p'tit script de remplissage de data :

Sub InsertData()
Dim Rs As ADODB.Recordset
Dim Derligne As Integer, i As Integer
Dim Requete As String
    
    Set Rs = New ADODB.Recordset
    Call ConnectionDB
    With Sheets(1)
        Derligne = .Range("A65000").End(xlUp).Row
        For i = 2 To Derligne
            Requete = "INSERT INTO voitures(id, marque, modele, cv) VALUES(" & _
                .Cells(i, 1) & ", '" & _
                .Cells(i, 2) & "', '" & _
                .Cells(i, 3) & "', " & _
                .Cells(i, 4) & ")"
            Rs.Open Requete, oConnect, adOpenDynamic, adLockOptimistic
        Next
    End With
    oConnect.Close
    Set Rs = Nothing
End Sub

 

Pour interroger la base, un p'tit script de requête :

Sub LireData()
Dim Rs As ADODB.Recordset
Dim Derligne As Integer, i As Integer
Dim Requete As String
Dim col As Integer
    
    Set Rs = New ADODB.Recordset
    Call ConnectionDB
    With Sheets(1)
        Derligne = .Range("G65000").End(xlUp).Row
        For i = 2 To Derligne
            Requete = "SELECT * FROM voitures WHERE id=" & .Cells(i, 7)
            Rs.Open Requete, oConnect
            If Not (Rs.EOF And Rs.BOF) Then
                Rs.MoveFirst
                While Not (Rs.EOF)
                    If Rs.Fields(0) = .Cells(i, 7).Value Then
                        For col = 1 To 3
                            .Cells(i, 7).Offset(0, col).Value = Rs.Fields(col)
                        Next col
                    End If
                    Rs.MoveNext
                Wend
            End If
            Rs.Close
        Next
    End With
    oConnect.Close
    Set Rs = Nothing
End Sub

Voilà, les grands principes sont là, en fait on construit sa requête de la même manière qu'en Php.
Il suffit ensuite d'adapter le code à votre cas
:) tatiak

 

Télécharge fichier exemple : vba_mysql.xlsm

 

Suite de 'Interroger une base MySql depuis Excel (VBA) - 1/2' =>

Interroger une base MySql depuis Excel (VBA) - 2/2 - Tatiak

Suite de l'article sur le couplage Excel Base MySql => http://tatiak.canalblog.com/archives/2014/04/06/29605283.html Et pour répondre à "Dorian" voici quelques notions à connaitre pour rédiger les requêtes au "format VBA".

http://tatiak.canalblog.com

 

Publicité
Commentaires
K
J'ai une erreur à : oConnect.Open S Et je ne parviens à en trouver la cause :( Help
Répondre
L
mantaap lanjutkaaan
Répondre
S
thank you sir.
Répondre
P
thats working, problem solved. Thank you so much
Répondre
L
how to import database?
Répondre
Publicité