Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Importation txt par Excel

2 réponses
Avatar
Thebe32
Bonjour à tous, c'est mon premier message sur le forum aussi je vais faire
de mon mieux !
Je n'ai pas pu trouver ce sujet dans l'historique aussi je me permet de le
mettre sur la table.
Avec Excel 97 et Windows 2000 je voudrais importer un fichier texte sous
Excel en répartissant les données sous 3 colonnes. J'ai trouve ce code sur
le net mais il bug vers la fin (ligne marquee "----->") :
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 "A"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
The procedure can be used like this:
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
J'ai mis en commentaire la ligne du dessus qui concerne Excel 2000 et
suivants. La fonction "RS2WS" à laquelle il est fait allusion n'est pas
definie. La personne qui a ecrit ce code exrit: "You'll find the procedure
RS2WS by clicking on this link" et en fait ce n'est que du texte, il n'y a
pas de lien.

Quelqu'un aurait-il une idee pour completer ou bien pour apporter une autre
macro qui ferait la meme chose ? (mon niveau est débutant)

Merci.

Thebe32

Adrese web en question:
http://www.exceltip.com/show_tip/Import_and_Export_in_VBA/Import_data_from_a_text_file_(ADO)_using_VBA_in_Microsoft_Excel/430.html

2 réponses

Avatar
michdenis
Excel sait très bien ouvrir un fichier texte.
Pour ce faire, tu ouvres Excel et à l'aide de la commande
Fichier / ouvrir / tu sélectionnes dans la fenêtre ouvrante
dans la liste déroulante "Type de fichier" Fichiers texte txt
et tu te laisses guider par l'assistant d'excel.
------------------------------------
L'exemple de code que tu proposes utilise une bibliothèque
additionnelle que tu te dois de charger :
dans la fenêtre de l'éditeur de code / barre de menu /
outils / référence / et tu coches :
Microsoft activex Data object 2.x librairy

**********************************************
SI TON FICHIER UTILISE LE SÉPARATEUR : VIRGULE SEULEMENT
**********************************************
(sinon aucun avantage d'utiliser ce qui suit)
tu peux faire des requêtes sur ton fichier comme si tu étais dans
une table d'une base de données. Tu peux choisir d'extraire seulement
certains champs et y ajouter des critères si besoin.
Exemple de code que tu copies dans un module standard :

'-------------------------------------------
Sub Exemple()
'Doit ajouter la bibliothèque
'Activex Data Object 2.8 Librairy

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range
Dim Chemin As String, File As String
'Où est situé le fichier
Chemin = "C:UsersPowerUser"
'Nom du fichier
File = "Denis1.txt"

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & ";" & _
"Extended Properties=""text;HDR=Yes;FMTÞlimited"""
'Yes signifie nom de champ, NO -> pas de nom de champ

'Exemple simple de Requête:
'Toutes les entrées du champ nom dont la lettre est
'plus première lettre plus grande que m
Requete = "Select Nom from " & File & " Where Nom >= 'm' "

'Toutes les entrées du champ nom dont le nom débute par m
'Requete = "Select Nom from " & File & " Where Nom like 'm%' "

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'-------------------------------------------
Pour obtenir le nom des champs dans la plage résultat,
y faut ajouter un bout de code




"Thebe32" a écrit dans le message de groupe de discussion :

Bonjour à tous, c'est mon premier message sur le forum aussi je vais faire
de mon mieux !
Je n'ai pas pu trouver ce sujet dans l'historique aussi je me permet de le
mettre sur la table.
Avec Excel 97 et Windows 2000 je voudrais importer un fichier texte sous
Excel en répartissant les données sous 3 colonnes. J'ai trouve ce code sur
le net mais il bug vers la fin (ligne marquee "----->") :
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 "A"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
The procedure can be used like this:
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
J'ai mis en commentaire la ligne du dessus qui concerne Excel 2000 et
suivants. La fonction "RS2WS" à laquelle il est fait allusion n'est pas
definie. La personne qui a ecrit ce code exrit: "You'll find the procedure
RS2WS by clicking on this link" et en fait ce n'est que du texte, il n'y a
pas de lien.

Quelqu'un aurait-il une idee pour completer ou bien pour apporter une autre
macro qui ferait la meme chose ? (mon niveau est débutant)

Merci.

Thebe32

Adrese web en question:
http://www.exceltip.com/show_tip/Import_and_Export_in_VBA/Import_data_from_a_text_file_(ADO)_using_VBA_in_Microsoft_Excel/430.html
Avatar
Thebe32
Un tout grand merci pour ton aide.

Effectivement, Excel sait très bien gérer l'affaire. Il a d'ailleurs accepté
qu'il y ait des points-virgule comme séparateur.

J'avais cherché une commande "importer" mais je n'avais pas pensé à passer
simplement par "fichierouvrir".

Merci également pour l'exhaustivité de ta réponse, le code pourrais me
servir ultérieurement.

Bonne suite,

Thebe32.

"michdenis" a écrit dans le message de
news:%
Excel sait très bien ouvrir un fichier texte.
Pour ce faire, tu ouvres Excel et à l'aide de la commande
Fichier / ouvrir / tu sélectionnes dans la fenêtre ouvrante
dans la liste déroulante "Type de fichier" Fichiers texte txt
et tu te laisses guider par l'assistant d'excel.
------------------------------------
L'exemple de code que tu proposes utilise une bibliothèque
additionnelle que tu te dois de charger :
dans la fenêtre de l'éditeur de code / barre de menu /
outils / référence / et tu coches :
Microsoft activex Data object 2.x librairy

**********************************************
SI TON FICHIER UTILISE LE SÉPARATEUR : VIRGULE SEULEMENT
**********************************************
(sinon aucun avantage d'utiliser ce qui suit)
tu peux faire des requêtes sur ton fichier comme si tu étais dans
une table d'une base de données. Tu peux choisir d'extraire seulement
certains champs et y ajouter des critères si besoin.
Exemple de code que tu copies dans un module standard :

'-------------------------------------------
Sub Exemple()
'Doit ajouter la bibliothèque
'Activex Data Object 2.8 Librairy

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, Rg As Range
Dim Chemin As String, File As String
'Où est situé le fichier
Chemin = "C:UsersPowerUser"
'Nom du fichier
File = "Denis1.txt"

Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & ";" & _
"Extended Properties=""text;HDR=Yes;FMTÞlimited"""
'Yes signifie nom de champ, NO -> pas de nom de champ

'Exemple simple de Requête:
'Toutes les entrées du champ nom dont la lettre est
'plus première lettre plus grande que m
Requete = "Select Nom from " & File & " Where Nom >= 'm' "

'Toutes les entrées du champ nom dont le nom débute par m
'Requete = "Select Nom from " & File & " Where Nom like 'm%' "

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie des données vers la "Feuil2") nom à adapter ...
Set Rg = Worksheets("Feuil2").Range("A1")
Rg.CopyFromRecordset Rst
Rst.Close: Conn.Close
Set Rg = Nothing
End Sub
'-------------------------------------------
Pour obtenir le nom des champs dans la plage résultat,
y faut ajouter un bout de code




"Thebe32" a écrit dans le message de groupe de


discussion :

Bonjour à tous, c'est mon premier message sur le forum aussi je vais faire
de mon mieux !
Je n'ai pas pu trouver ce sujet dans l'historique aussi je me permet de le
mettre sur la table.
Avec Excel 97 et Windows 2000 je voudrais importer un fichier texte sous
Excel en répartissant les données sous 3 colonnes. J'ai trouve ce code sur
le net mais il bug vers la fin (ligne marquee "----->") :
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 "A"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
The procedure can be used like this:
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
J'ai mis en commentaire la ligne du dessus qui concerne Excel 2000 et
suivants. La fonction "RS2WS" à laquelle il est fait allusion n'est pas
definie. La personne qui a ecrit ce code exrit: "You'll find the procedure
RS2WS by clicking on this link" et en fait ce n'est que du texte, il n'y a
pas de lien.

Quelqu'un aurait-il une idee pour completer ou bien pour apporter une


autre
macro qui ferait la meme chose ? (mon niveau est débutant)

Merci.

Thebe32

Adrese web en question:



http://www.exceltip.com/show_tip/Import_and_Export_in_VBA/Import_data_from_a_text_file_(ADO)_using_VBA_in_Microsoft_Excel/430.html