Easy-Micro

ESPACEMEMBRE VBA
Access et VBA

Liens VBA vers Microsoft Access depuis Excel

Pour avoir accès aux objets d'une autre application, donc pour manipuler les informations du serveur, on doit référencer sa bibliothèque d'objets (un fichier .olb) via le menu Outils / Références de l'éditeur VBA. Ce menu est la liste des serveurs OLE enregistrés dans la base de registre de Windows.

VBA La technologie Automation

Automation, appelée également OLE (Object Linking and Embedding) ou OLE Automation, est une technologie qui permet de manipuler les objets d'une autre application directement à partir d'Excel. Pour utiliser la technologie Automation, on doit définir dans le code VBA une variable objet associée aux objets de type application.

Pour réaliser notre exemple (Afficher des données Access dans Excel), il faut d'abord sélectionner une référence au module externe Access via le menu Outils / Références de l'éditeur VBA. On coche l'option Microsoft Access 12.0 Object Library (11.0 correspond à 2003, 12.0 pour 2007 et 14.0 pour 2010).

VBA Afficher la liste des tables d'une base Access dans Excel
Ouvrir le fichier Access "comptoir.mdb" et lister le nom des tables dans la feuille courante.

Sub Proc_Afficher_Noms_Tables_Access()
' Création de la variable objet :
Dim acc As Access.Application
' Initialisation de la variable :
Set acc = New Access.Application

Dim i As Integer

acc.OpenCurrentDatabase ("c:\comptoir.mdb")

For i = 0 To acc.CurrentData.AllTables.Count - 1
Range("A" & i + 1).Value = acc.CurrentData.AllTables(i).Name
Next i

acc.CloseCurrentDatabase

End Sub

Note : -1 car 16 tables! Si je part à 0, j'affiche 17 tables alors qu'il n'y en a que 16.

On aurait pu demander uniquement les tables qui commence pas le mot "msys" :
For i = 0 To acc.CurrentData.AllTables.Count - 1
If Left(UCase(acc.CurrentData.AllTables(i).Name), 4) <> "MSYS" Then
Range("A" & i + 1).Value = acc.CurrentData.AllTables(i).Name
End If
Next i

VBA Pour aller plus loin : requête qui affiche la liste des codes client de la table Clients

Sub proc_liste_des_code_client()
Dim i As Integer

Dim acc As Access.Application
Set acc = New Access.Application

' Ouvre la base
acc.OpenCurrentDatabase ("C:\comptoir.mdb")

' Création d'un jeu de données
Dim rec As Object
Set rec = acc.CurrentDb.OpenRecordset("Clients")

'Affiche le nombre de champs
Range("A1").Value = rec.Fields.Count

'Affiche le nombre d'enregistrement
rec.MoveLast
Range("A2").Value = rec.RecordCount

' Affichage des Champs de la table Clients :
' Code client, Société, Contact, Fonction, Adresse, Ville

rec.MoveFirst
i = 1

While Not rec.EOF
Cells(i, 2).Value = rec.Fields("Code client")
rec.MoveNext
i = i + 1
Wend

rec.Close

End Sub

Note: While produit une boucle jusqu'à ce que l'expression devienne fausse.
Elle se termine par WEND (While END).


< Page précédente VBA Page suivante >