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.