Importer des données à partir d’un fichier texte (ADO) en utilisant VBA dans Microsoft Excel
La procédure ci-dessous peut être utilisée pour obtenir un jeu d’enregistrements ADO à partir d’un fichier texte et remplir le résultat dans une feuille de calcul.
Sub GetTextFileData(strSQL As String, strFolder As String, rngTargetCell As Range) ' example: GetTextFileData "SELECT * FROM filename.txt", _ "C:\FolderName", Range("A3") ' example: GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _ "C:\FolderName", Range("A3") Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer If rngTargetCell Is Nothing Then Exit Sub Set cn = New ADODB.Connection On Error Resume Next cn.Open "Driver={Microsoft Text Driver (.txt; .csv)};" & _ "Dbq=" & strFolder & ";" & _ "Extensions=asc,csv,tab,txt;" On Error GoTo 0 If cn.State <> adStateOpen Then Exit Sub Set rs = New ADODB.Recordset On Error Resume Next rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText On Error GoTo 0 If rs.State <> adStateOpen Then cn.Close Set cn = Nothing Exit Sub End If ' the field headings For f = 0 To rs.Fields.Count - 1 rngTargetCell.Offset(0, f).Formula = rs.Fields(f).Name Next f rngTargetCell.Offset(1, 0).CopyFromRecordset rs ' works in Excel 2000 or later 'RS2WS rs, rngTargetCell ' works in Excel 97 or earlier rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub
La procédure peut être utilisée comme ceci:
Sub TestGetTextFileData() Application.ScreenUpdating = False Workbooks.Add GetTextFileData "SELECT * FROM filename.txt", "C:\FolderName", Range("A3") ' GetTextFileData "SELECT * FROM filename.txt WHERE fieldname = 'criteria'", _ "C:\FolderName", Range("A3") Columns("A:IV").AutoFit ActiveWorkbook.Saved = True End Sub
Remplacez filename.txt par le nom du fichier texte à partir duquel vous souhaitez obtenir des données.
Remplacez C: \ FolderName par le nom du dossier dans lequel le fichier texte est enregistré.
La première ligne du fichier texte sera utilisée comme en-tête de colonne / nom de champ.
Chaque colonne avec datwa doit être séparée par le caractère séparateur de liste utilisé dans les paramètres régionaux du Panneau de configuration. En Norvège, il s’agit généralement d’un point-virgule (;), dans d’autres pays, cela peut être une virgule (,).
Vous trouverez la procédure RS2WS en cliquant sur ce lien.
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.