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

VBA Lecture fichier texte

7 réponses
Avatar
Emilie
Bonjour à tous

Je tente de lire dans Excel avec VBA un fichier texte "C:\Test.txt"
structuré de la façon suivante :
1 | Cod1 | Désignation 1 | 1.000
2 | Cod2 | Désignation 2 | 1.000
3 | Cod3 | Désignation 3 | 2.000

Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim n As Integer
n = FreeFile

Open "C:\Test.txt" For Input As #n

Do While Not EOF(1)
Input #n, NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

Le problème c'est que Input # lit uniquement des séparateurs de colonne de
type virgule.
Comment faire pour lire un fichier avec des séparateurs de colonne de type |
ou ! par exemple. (je suis obligée de choisir un séparateur différent de
virgule car les désiGnations peuvent contenir des virgules)

Merci à tous ceux qui pourront m'aider.

7 réponses

Avatar
isabelle
bonjour Emile,

une autre approche "OpenText" ferait t'elle l'affaire ?

Workbooks.OpenText Filename:="C:zazatest1.txt", _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, _
Tab:=True, _
Semicolon:úlse, _
Comma:úlse, _
Space:úlse, _
Other:=True, _
OtherChar:="|", _
FieldInfo:=Array(Array(1, 1)), _
TrailingMinusNumbers:=True

isabelle


Bonjour à tous

Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
structuré de la façon suivante :
1 | Cod1 | Désignation 1 | 1.000
2 | Cod2 | Désignation 2 | 1.000
3 | Cod3 | Désignation 3 | 2.000

Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim n As Integer
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Input #n, NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

Le problème c'est que Input # lit uniquement des séparateurs de colonne de
type virgule.
Comment faire pour lire un fichier avec des séparateurs de colonne de type |
ou ! par exemple. (je suis obligée de choisir un séparateur différent de
virgule car les désiGnations peuvent contenir des virgules)

Merci à tous ceux qui pourront m'aider.




Avatar
Damien Kergosien
Bonjour Emilie

Si la stucture du fichier n'a pas à évoluer ceci devrait faire
l'affaire :
(à noter que

Sub test()
Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim déBut As Integer, chaineLue As String, posSep As Integer,
sépaRateur As String

Dim n As Integer

sépaRateur = "|"
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Line Input #n, chaineLue
déBut = 1

posSep = InStr(déBut, chaineLue, sépaRateur)
NUMERO = Mid(chaineLue, déBut, posSep - déBut)
déBut = posSep + 1
posSep = InStr(déBut, chaineLue, sépaRateur)
COD = Mid(chaineLue, déBut, posSep - déBut)
déBut = posSep + 1
posSep = InStr(déBut, chaineLue, sépaRateur)
DESIGNATIONS = Mid(chaineLue, déBut, posSep - déBut)
QTE = Right(chaineLue, Len(chaineLue) - posSep - 1)

' pour vérifier seulement
Debug.Print NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

End Sub

Damien

Bonjour à tous

Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
structuré de la façon suivante :
1 | Cod1 | Désignation 1 | 1.000
2 | Cod2 | Désignation 2 | 1.000
3 | Cod3 | Désignation 3 | 2.000

Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim n As Integer
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Input #n, NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

Le problème c'est que Input # lit uniquement des séparateurs de colonne de
type virgule.
Comment faire pour lire un fichier avec des séparateurs de colonne de type |
ou ! par exemple. (je suis obligée de choisir un séparateur différent de
virgule car les désiGnations peuvent contenir des virgules)

Merci à tous ceux qui pourront m'aider.


Avatar
Emilie
Merci Damien

Dans mon traitement je dois exclure les données des 2 dernières lignes.

Y a t-il un moyen de connaître le nombre total de lignes à lire ?

Avez-vous une idée ?

Par avance merci.

Emilie


Bonjour Emilie

Si la stucture du fichier n'a pas à évoluer ceci devrait faire
l'affaire :
(à noter que

Sub test()
Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim déBut As Integer, chaineLue As String, posSep As Integer,
sépaRateur As String

Dim n As Integer

sépaRateur = "|"
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Line Input #n, chaineLue
déBut = 1

posSep = InStr(déBut, chaineLue, sépaRateur)
NUMERO = Mid(chaineLue, déBut, posSep - déBut)
déBut = posSep + 1
posSep = InStr(déBut, chaineLue, sépaRateur)
COD = Mid(chaineLue, déBut, posSep - déBut)
déBut = posSep + 1
posSep = InStr(déBut, chaineLue, sépaRateur)
DESIGNATIONS = Mid(chaineLue, déBut, posSep - déBut)
QTE = Right(chaineLue, Len(chaineLue) - posSep - 1)

' pour vérifier seulement
Debug.Print NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

End Sub

Damien

Bonjour à tous

Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
structuré de la façon suivante :
1 | Cod1 | Désignation 1 | 1.000
2 | Cod2 | Désignation 2 | 1.000
3 | Cod3 | Désignation 3 | 2.000

Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim n As Integer
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Input #n, NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

Le problÚme c'est que Input # lit uniquement des séparateurs de colonne de
type virgule.
Comment faire pour lire un fichier avec des séparateurs de colonne de type |
ou ! par exemple. (je suis obligée de choisir un séparateur différent de
virgule car les désiGnations peuvent contenir des virgules)

Merci à tous ceux qui pourront m'aider.







Avatar
Emilie
Merci Isabelle

Je vais essayer cette solution si je n'arrive pas à finaliser avec celle de
Damien.

Merci pour votre aide.

Cordialement

Emilie


bonjour Emile,

une autre approche "OpenText" ferait t'elle l'affaire ?

Workbooks.OpenText Filename:="C:zazatest1.txt", _
Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, _
Tab:=True, _
Semicolon:úlse, _
Comma:úlse, _
Space:úlse, _
Other:=True, _
OtherChar:="|", _
FieldInfo:=Array(Array(1, 1)), _
TrailingMinusNumbers:=True

isabelle


Bonjour à tous

Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
structuré de la façon suivante :
1 | Cod1 | Désignation 1 | 1.000
2 | Cod2 | Désignation 2 | 1.000
3 | Cod3 | Désignation 3 | 2.000

Dim NUMERO As Long
Dim COD As String
Dim QTE As String
Dim DESIGNATIONS As String

Dim n As Integer
n = FreeFile

Open "C:Test.txt" For Input As #n

Do While Not EOF(1)
Input #n, NUMERO, COD, DESIGNATIONS, QTE
'Ici traitement
Loop

Close #n

Le problème c'est que Input # lit uniquement des séparateurs de colonne de
type virgule.
Comment faire pour lire un fichier avec des séparateurs de colonne de type |
ou ! par exemple. (je suis obligée de choisir un séparateur différent de
virgule car les désiGnations peuvent contenir des virgules)

Merci à tous ceux qui pourront m'aider.







Avatar
Alain CROS
Bonjour.

Sub LireFichierTexte()
Dim NUMERO&, COD$, QTE$, DESIGNATIONS$
Dim Lachaine$, Tblo, n%
n = FreeFile
Open "C:Test.txt" For Input As #n
Do While Not EOF(n)
Line Input #n, Lachaine
Tblo = Split(Lachaine, "|")
NUMERO = CLng(Tblo(0))
COD = Tblo(1)
DESIGNATIONS = Tblo(2)
QTE = Tblo(3)
MsgBox "NUMERO = " & NUMERO & vbNewLine & _
"COD = " & COD & vbNewLine & _
"DESIGNATIONS = " & DESIGNATIONS & vbNewLine & _
"QTE = " & QTE
'Ici traitement
Loop
Close #n
End Sub

Alain CROS

"Emilie" a écrit dans le message de news:
| Bonjour à tous
|
| Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
| structuré de la façon suivante :
| 1 | Cod1 | Désignation 1 | 1.000
| 2 | Cod2 | Désignation 2 | 1.000
| 3 | Cod3 | Désignation 3 | 2.000
|
| Dim NUMERO As Long
| Dim COD As String
| Dim QTE As String
| Dim DESIGNATIONS As String
|
| Dim n As Integer
| n = FreeFile
|
| Open "C:Test.txt" For Input As #n
|
| Do While Not EOF(1)
| Input #n, NUMERO, COD, DESIGNATIONS, QTE
| 'Ici traitement
| Loop
|
| Close #n
|
| Le problème c'est que Input # lit uniquement des séparateurs de colonne de
| type virgule.
| Comment faire pour lire un fichier avec des séparateurs de colonne de type |
| ou ! par exemple. (je suis obligée de choisir un séparateur différent de
| virgule car les désiGnations peuvent contenir des virgules)
|
| Merci à tous ceux qui pourront m'aider.
|
|
Avatar
Emilie
Bonjour Alain

Ta méthode est très efficace. J'ai juste rajouté un blanc de part et d'autre
de | pour avoir une extraction parfaite de la chaine de caractère.

Merci à tous

Emilie


Bonjour.

Sub LireFichierTexte()
Dim NUMERO&, COD$, QTE$, DESIGNATIONS$
Dim Lachaine$, Tblo, n%
n = FreeFile
Open "C:Test.txt" For Input As #n
Do While Not EOF(n)
Line Input #n, Lachaine
Tblo = Split(Lachaine, "|")
NUMERO = CLng(Tblo(0))
COD = Tblo(1)
DESIGNATIONS = Tblo(2)
QTE = Tblo(3)
MsgBox "NUMERO = " & NUMERO & vbNewLine & _
"COD = " & COD & vbNewLine & _
"DESIGNATIONS = " & DESIGNATIONS & vbNewLine & _
"QTE = " & QTE
'Ici traitement
Loop
Close #n
End Sub

Alain CROS

"Emilie" a écrit dans le message de news:
| Bonjour à tous
|
| Je tente de lire dans Excel avec VBA un fichier texte "C:Test.txt"
| structuré de la façon suivante :
| 1 | Cod1 | Désignation 1 | 1.000
| 2 | Cod2 | Désignation 2 | 1.000
| 3 | Cod3 | Désignation 3 | 2.000
|
| Dim NUMERO As Long
| Dim COD As String
| Dim QTE As String
| Dim DESIGNATIONS As String
|
| Dim n As Integer
| n = FreeFile
|
| Open "C:Test.txt" For Input As #n
|
| Do While Not EOF(1)
| Input #n, NUMERO, COD, DESIGNATIONS, QTE
| 'Ici traitement
| Loop
|
| Close #n
|
| Le problème c'est que Input # lit uniquement des séparateurs de colonne de
| type virgule.
| Comment faire pour lire un fichier avec des séparateurs de colonne de type |
| ou ! par exemple. (je suis obligée de choisir un séparateur différent de
| virgule car les désiGnations peuvent contenir des virgules)
|
| Merci à tous ceux qui pourront m'aider.
|
|





Avatar
Alain CROS
Bonjour.

Sub LireFichierTexte()
Dim NUMERO&, COD$, QTE$, DESIGNATIONS$
Dim Lachaine$, TbloA, TbloB, n%, I&, J&
n = FreeFile
Open "C:Test.txt" For Input As #n
Lachaine = Input(LOF(n), #n)
Close #n
TbloA = Split(Lachaine, vbCrLf)
J = UBound(TbloA) - 1
For I = 0& To J - 2
TbloB = Split(TbloA(I), " | ")
NUMERO = CLng(TbloB(0))
COD = TbloB(1)
DESIGNATIONS = TbloB(2)
QTE = TbloB(3)
MsgBox "NUMERO = " & NUMERO & vbNewLine & _
"COD = " & COD & vbNewLine & _
"DESIGNATIONS = " & DESIGNATIONS & vbNewLine & _
"QTE = " & QTE
'Ici traitement
Next
End Sub

Alain CROS

"Emilie" a écrit dans le message de news:
| Merci Damien
|
| Dans mon traitement je dois exclure les données des 2 dernières lignes.
|
| Y a t-il un moyen de connaître le nombre total de lignes à lire ?
|
| Avez-vous une idée ?
|
| Par avance merci.
|
| Emilie
|