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