Lire et écrire dans un classeur fermé

Je fais référence à l’article silkyroad.developpez.com/VBA/ClasseursFermes, pour lequel je présente ici un résumé.

Se connecter au classeur

Commencez par créer un module (CTRL + R > clic droit sur un module existant > Insertion > Module) puis coller ce code :


Function ConnectionClasseur(sFichierExcel As String) As ADODB.Connection
Dim cn As New ADODB.Connection

 Set cn = New ADODB.Connection
 cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFichierExcel & ";Extended Properties=Excel 12.0 Xml;HDR=YES"
 cn.Open
 Set ConnectionClasseur = cn

End Function

Dans la partie du code qui va appeler la fonction, saisissez :


Dim sCheminCompletFichierExcel As String
Dim cn As New ADODB.Connection
Const NOM_FICHIER_EXCEL = "ClasseurLu.xlsx"

 sCheminCompletFichierExcel = ActiveWorkbook.Path & "\" & NOM_FICHIER_EXCEL

 Set cn = ConnectionClasseur(sCheminCompletFichierExcel)

Lire les données du classeur


Dim sSQL As String
Dim rst As New ADODB.Recordset

sSQL = "SELECT * FROM [" & NOM_FEUILLE_LU & "$]"
rst.Open sSQL, cn

While Not rst.EOF
'Affiche le contenu du premier champ
Msgbox rst.Fields(0)
rst.MoveNext
Wend

Vous noterez donc que le premier champ est numéroté 0 (zéro)
On peut aussi écrire :


Msgbox rst.Fields("NomDuChamp")

Ecrire des données


sSQL = "INSERT INTO [" & NOM_FEUILLE_LU & "$] (Colonne1) VALUES (123)"
cn.Execute sSQL

Les données au format Texte s’écrivent avec des apostrophes autour, tandis que les données Date s’écrivent avec des # autour, et au format MM/JJ/AAAA.

Supprimer des lignes

Cette opération n’est pas possible dans un fichier Excel fermé.

Autres sources

Gonzague DUCOS a écrit 35 articles

Formateur et développeur Office VBA et Windev