Extraction des données spécifiques avec position à partir d'un fichier text

J'ai besoin de lire des données spécifiques avec des positions à partir d'un fichier text. Le problème, Mon code doit prendre juste les chiffre de la première ligne qui commence par (100) et ignorer si ce chiffre au milieu

example text file:

Some information here..

100173581301120186097007439210033629140078482400008800
150173601301120844005007518822033683750024027000008800

100173581301120186097007439210033629140078482400008800
200173601301120844005007518822033683750024027000008800

Some more information here..

Mon code :

***************************************************************************************

Dim myFile As String, text As String, posLong As Long, rw As Long, cl As Long

myFile = Application.GetOpenFilename()

Open myFile For Input As #1
text = Input(LOF(1), 1)
Close

rw = 2 ' first row for data
cl = 1 ' first column for data
posLong = 1

Do
posLong = InStr(posLong + 1, text, "100")
If posLong = 0 Then Exit Do 'exit loop when no more latitude
Cells(rw, cl + 1) = Mid(text, posLong + 7, 4)
Cells(rw, cl + 2) = Mid(text, posLong + 5, 12)
Cells(rw, cl + 3) = ...............
Cells(rw, cl + 6) =...................

rw = rw + 1
cl = cl + 0

Loop

Close #1

End Sub

******************************************************************************************

Edit modo : Merci de mettre le code entre balise avec le bouton </>

NB* : J'ai besoin une règle pour prendre les lignes commençant par "100" et ignorer les lignes qui contiennent "100" n'importe position et qui début avec les 3 premiers chiffre

Bonjour,

Dans un premier temps, recherchez la présence de la valeur 100 dans la ligne testée, mais à partir du 4ème caractère de la ligne et non à partir du premier.

Si la valeur 100 est trouvée on passe à la ligne suivante,

sinon on vérifie si les 3 premiers caractères = 100,

si la valeur 100 existe alors on conserve la ligne,

sinon on passe à la ligne suivante:

Cdlt

Bonjour

j'ai pas compris comment appliquer ça !

NB* : J'ai besoin une règle sur mon code pour prendre en charge les lignes commençant par "100" et ignorer les lignes qui contiennent "100" n'importe position et qui début avec les 3 premiers chiffre

Cordialement.

au lieu de:

posLong = InStr(posLong + 1, text, "100")

ici vous commencez le test à partir du premier caractère, essayez plutôt ceci:

posLong = InStr(4, text, "100")

ici on commence le test à partir du 4ème caractère, on ignore volontairement les 3 premiers pour chercher la valeur 100 dans le reste de la ligne)

ensuite, appliquez les tests comme j'ai écris précédemment, si la valeur 100 est trouvée, donc ce n'est pas bon, on teste la ligne suivante sinon, on vérifie que la valeur des 3 premiers caractères soit 100, si ce n'est pas le cas on passe à la ligne suivante sinon on la conserve(en fait, vous en faites ce que vous voulez)

Si c'est vous qui avez créer le code que vous avez fourni, ce ne devrez pas être compliqué pour réaliser ces tests.

Bonjour. En VBA on utiliserait la condition If Left(ligne,3) = "100".

Open myFile For Input As #1
    While Not EOF(1)
        Line Input #1, Ligne
        If Left(Ligne,3) = "100" Then
            bla...bla...
        End If
    Wend
Close #1

Malheureusement, Je n'ai encore trouvé la solution ce que je veux

Bonjour,

Je ne comprends pas, avez-vous bien appliquer ma façon de procéder?

Voici un fichier en exemple, cliquez sur le bouton et seules les lignes commençant par 100 et qui ne contiennent pas 100 au milieu sont retenues.

le code associé

Sub Extraction()
    Dim DerLig As Long, Lig_Dest As Long, i As Long
    Dim Text As String
    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Lig_Dest = 1
    For i = 1 To DerLig
        Text = Cells(i, "A")
        If InStr(4, Text, "100", 1) = 0 And Left(Text, 3) = "100" Then
            Cells(Lig_Dest, "C") = Text
            Lig_Dest = Lig_Dest + 1
        End If
    Next i
End Sub

Il ne reste plus qu'à l'adapter à votre situation.

Cdlt

Malheureusement, Je n'ai encore trouvé la solution ce que je veux

Bonjour,

Si tu nous joignais un vrai fichier .txt au lieu d'un mauvais exemple... Tu aurais sans doute déjà la solution !

A+

Bonjour tout le monde,
Une proposition : les deux fichiers doivent être dans le même dossier avant de lancer la macro. Le fichier TXT est purement imaginaire, hélas.

12datas.zip (16.13 Ko)
11ligne100.xlsm (19.50 Ko)
Sub Macro1()
    Dim compt As Long, ff As Integer, ligne As String

    ff = FreeFile: compt = 0

    Open ThisWorkbook.Path & "\datas.txt" For Input As #ff
        While Not EOF(ff)
            Line Input #ff, ligne
            If Left(ligne, 3) = "100" Then
                compt = compt + 1
                Cells(compt, 1) = ligne
            End If
        Wend
    Close #ff
End Sub

Je vous remercie infiniment tous pour votre aide
Veuillez trouver ci-après, Ce que je recherche exactement :

23mydata.txt (911.00 Octets)

bonsoir,

Une solution :

Sub Galopin()
Dim myFile$, Arr, i%, cpt%, FirstLine%
FirstLine = 24
myFile = Application.GetOpenFilename()
    Workbooks.OpenText Filename:=myFile, _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, _
        Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1)), TrailingMinusNumbers:=True
Arr = ActiveSheet.[A1].CurrentRegion.Value
ActiveWorkbook.Close
With ActiveSheet
   For i = 1 To UBound(Arr)
      If Mid(Arr(i, 1), 1, 3) = "100" Then
         .Cells(FirstLine + cpt, 1) = Mid(Arr(i, 1), 4, 1)
         .Cells(FirstLine + cpt, 2) = Format(Mid(Arr(i, 1), 15, 4), "0000")
         .Cells(FirstLine + cpt, 3) = Mid(Arr(i, 1), 5, 2)
         .Cells(FirstLine + cpt, 4) = Mid(Arr(i, 1), 6, 3)
         .Cells(FirstLine + cpt, 5) = Arr(i, 2)
         cpt = cpt + 1
      End If
   Next
End With
End Sub

Nota : J'ai mis FirstLine à 24... A adapter...

A+

galopin01 Merci pour cette solution, Mais Ça ne marche pas quand je l'applique sur des fichiers grande taille " File with Long variable "

Erreur : Run-time Error '6': Overflow

Remplace :

Dim myFile$, Arr, i%, cpt%, FirstLine%
par
Dim myFile$, Arr, i&, cpt&, FirstLine&

Le pb venait du fichier TXT trop simplifié : il y a toujours un danger à vouloir simplifier la vie des autres (Soun Tsou). Bon dimanche à tous.

Rechercher des sujets similaires à "extraction donnees specifiques position partir fichier text"