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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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%' "
'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
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%' "
'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" <benoitptcoeur@gmail.com> a écrit dans le message de groupe de discussion :
ePKIWgVkJHA.1248@TK2MSFTNGP03.phx.gbl...
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
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%' "
'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
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%' "
'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)
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" <michdenis@hotmail.com> a écrit dans le message de
news:%23rA386WkJHA.1928@TK2MSFTNGP03.phx.gbl...
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%' "
'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" <benoitptcoeur@gmail.com> a écrit dans le message de groupe de
discussion :
ePKIWgVkJHA.1248@TK2MSFTNGP03.phx.gbl...
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)
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%' "
'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)