Utilisez un classeur fermé comme une base de données (ADO) en utilisant VBA dans Microsoft Excel
Avec les procédures ci-dessous, vous pouvez utiliser ADO pour récupérer un jeu d’enregistrements à partir d’un classeur fermé et lire / écrire des données.
Appelez la procédure comme ceci:
GetWorksheetData « C: FoldernameFilename.xls », « SELECT * FROM [SheetName $]; », ThisWorkbook.Worksheets (1) .Range (« A3 »)
Remplacez SheetName par le nom de la feuille de calcul à partir de laquelle vous souhaitez récupérer les données.
Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long If TargetCell Is Nothing Then Exit Sub Set cn = New ADODB.Connection On Error Resume Next cn.Open « DRIVER = \ {Microsoft Excel Driver ( * .xls)}; DriverId = 790; ReadOnly = True; » & _ « DBQ = » & strSourceFile & « ; »
‘DriverId = 790: Excel 97/2000’ DriverId = 22: Excel 5/95 ‘DriverId = 278: Excel 4’ DriverId = 534: Excel 3 sur erreur GoTo 0 Si cn n’est rien, MsgBox « Impossible de trouver le fichier! « , vbExclamation, ThisWorkbook.Name Exit Sub End If ‘open a recordset Set rs = New ADODB.Recordset On Error Resume Next rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText’ rs.Open » SELECT FROM [SheetName $] » , _ cn, adOpenForwardOnly, adLockReadOnly, adCmdText ‘rs.Open « SELECT FROM [SheetName $] », _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open « SELECT FROM [SheetName $] WHERE [Field Name] LIKE ‘A% ‘ », _ cn, adOpenStatic, adLockOptimistic, adCmdText’ rs.Open » SELECT FROM [SheetName $] WHERE [Field Name] LIKE ‘A%’ ORDER BY [Field Name] « , _ cn, adOpenStatic, adLockOptimistic, adCmdText ‘facultatif moyens de récupérer un jeu d’enregistrements ‘Set rs = cn.Execute (« [A1: Z1000] »)’ première feuille de calcul ‘Set rs = cn.Execute (« [DefinedRangeName] »)’ n’importe quelle feuille de calcul Sur Erreur GoTo 0 Si rs n’est rien alors MsgBox « Impossible d’ouvrir the file! « , vbExclamation, ThisWorkbook.Name cn.Close Set cn = Nothing Exit Sub End If RS2WS rs, TargetCell ‘TargetCell.CopyFromRecordset rs’ approche optionnelle pour Excel 2000 ou version ultérieure Si rs.State = adStateOpen Then rs.Close End If Set rs = Nothing cn.Close Set cn = Nothing End Sub L’exemple de macro suppose que votre projet VBA a ajouté une référence à la bibliothèque d’objets ADO.
Vous pouvez le faire à partir du VBE en sélectionnant le menu Outils, Références et en sélectionnant Bibliothèque d’objets Microsoft ActiveX Data Objects x.x.