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' =>
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