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
- support.microsoft.com/kb/189897/en-us : problème des chaînes tronquées quand on utilise un drive ODBC.
- www.connectionstrings.com : les chaines de connection vers n’importe quel soft