export de fichier txt vers excel

boza

XLDnaute Nouveau
Bonjour a tous,

j'ai besoin de votre aide !
j'ai besopin d exporter certains elements d'un fichier texte (que je vous join en exemple).
En gros j'ai besoin d'extraire

- dans une 1ere colonne excel l' id_transaction="3c549578-aea6-11e2-96a6-00163ea647d4" donc seulement ca : 3c549578-aea6-11e2-96a6-00163ea647d4

- dans une 2eme colonne excel l' appelant="651509737" donc seulement ca : 651509737

- dans une 3eme colone excel l' where id=37 donc seulement ca : 37

Je vous joint un ficier comportant mes donnees. Mais sachez que mon fichier de base comporte des millions (3 pour etre exact) de bloc de texte identique séparé d'une interligne.

Merci pour votre aide car le sort de ma société en depend, et je ne plaisante pas !!

Merci pour tout !
 

Pièces jointes

  • test.txt
    727 bytes · Affichages: 68
  • test.txt
    727 bytes · Affichages: 71
  • test.txt
    727 bytes · Affichages: 69
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : URGENT : export de fichier txt vers excel

Bonjour,

Je constate que tu es relativement récent sur ce site (donc bienvenu à toi). Sache que les intervenants sont tous des bénévoles et commencer une demande par le mot URGENT n'attire pas la bienveillance des membres du forum
Passons pour cette fois : quelques précisions
S'agit-il dans ton fichier d'extraire toujours les 3 mêmes termes définis ci-dessus ou faut-il extraire dans chaque bloc d'informations, les données mentionnées derrière :
id-transaction
appelant
where id

a+
 

boza

XLDnaute Nouveau
Re : URGENT : export de fichier txt vers excel

Bonjour chalet,

mes excuses pour cette maladresse...
Oui dans chaque bloc il faut extraire la meme information.
pour schematiser :
en A1 il me faut 3c549578-aea6-11e2-96a6-00163ea647d4
en B1 il me faut 651509737
en C1 il me faut 3

et en A2, B2, C2 les memes informations du bloc d'information suivant et ainsi de suite...

Suis je assez clair?

Merci
 

mromain

XLDnaute Barbatruc
Re : export de fichier txt vers excel

Bonjour boza, CHALET53, le forum :)

Ton fichier texte est assez étrange. En effet, si je l'ouvre avec le blocnote, il ne comporte qu'une seule ligne ; par contre, si je nouvre avec Notepad++, il comporte 13 lignes (cf fichier joint).

attachment.php


Ci-dessous un essai (s'il ne fonctionne pas sur ton vrai fichier texte, il serait intéressant que tu nous renvoie un exemple avec plusieurs bloc de texte identique séparé d'une interligne).
VB:
Sub ImportTxt()
Dim shDest As Worksheet, i As Long, txtLine As String, tmpVar As Variant
Dim myFso As Object, txtFile As Object

    Set shDest = ThisWorkbook.Sheets("Feuil1")     'Feuille dans laquelle seront importer les données
     shDest.Cells.Clear
    
    shDest.Cells(1, 1).Value = "id_transaction"
    shDest.Cells(1, 2).Value = "appelant"
    shDest.Cells(1, 3).Value = "where id"
    i = 2
    
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set txtFile = myFso.OpenTextFile("C:\test.txt", 1)    'path du fichier texte
    
    While Not txtFile.AtEndOfStream
        txtLine = txtFile.ReadLine
        If InStr(txtLine, "id_transaction=""") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "id_transaction="""), Len(txtLine))
            tmpVar = Replace(Replace(tmpVar, "id_transaction=", ""), """", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            shDest.Cells(i, 1) = tmpVar
        End If
        If InStr(txtLine, "&appelant=") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "&appelant="), Len(txtLine))
            tmpVar = Replace(tmpVar, "&appelant=", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            If IsNumeric(tmpVar) Then tmpVar = CLng(tmpVar)
            shDest.Cells(i, 2) = tmpVar
        End If
        If InStr(txtLine, "where id=") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "where id="), Len(txtLine))
            tmpVar = Replace(tmpVar, "where id=", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            If IsNumeric(tmpVar) Then tmpVar = CLng(tmpVar)
            shDest.Cells(i, 3) = tmpVar
        End If
        If InStr(txtLine, "Fin de transaction") <> 0 Then
            i = i + 1
        End If
    Wend
    
    txtFile.Close
    Set txtFile = Nothing: Set myFso = Nothing
End Sub

PS : il faut adapter le nom de la feuille d'import, ainsi que le path du fichier texte.

A+
Miki
 

Pièces jointes

  • FichierTexte.jpg
    FichierTexte.jpg
    42.1 KB · Affichages: 122

boza

XLDnaute Nouveau
Re : export de fichier txt vers excel

Bonjour mromain,

Je joins le nouveau fichier qui devrait etre plus comprehensible comme demandé.
J'ai oublié de preciser, je suis sur mac.
J'ai essayé avec ta macro et j'ai un message d'erreur qui me dit : erreur d'execution 429. un composant active ne peut pas creer d'objet



Bonjour boza, CHALET53, le forum :)

Ton fichier texte est assez étrange. En effet, si je l'ouvre avec le blocnote, il ne comporte qu'une seule ligne ; par contre, si je nouvre avec Notepad++, il comporte 13 lignes (cf fichier joint).

attachment.php


Ci-dessous un essai (s'il ne fonctionne pas sur ton vrai fichier texte, il serait intéressant que tu nous renvoie un exemple avec plusieurs bloc de texte identique séparé d'une interligne).
VB:
Sub ImportTxt()
Dim shDest As Worksheet, i As Long, txtLine As String, tmpVar As Variant
Dim myFso As Object, txtFile As Object

    Set shDest = ThisWorkbook.Sheets("Feuil1")     'Feuille dans laquelle seront importer les données
     shDest.Cells.Clear
    
    shDest.Cells(1, 1).Value = "id_transaction"
    shDest.Cells(1, 2).Value = "appelant"
    shDest.Cells(1, 3).Value = "where id"
    i = 2
    
    Set myFso = CreateObject("Scripting.FileSystemObject")
    Set txtFile = myFso.OpenTextFile("C:\test.txt", 1)    'path du fichier texte
    
    While Not txtFile.AtEndOfStream
        txtLine = txtFile.ReadLine
        If InStr(txtLine, "id_transaction=""") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "id_transaction="""), Len(txtLine))
            tmpVar = Replace(Replace(tmpVar, "id_transaction=", ""), """", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            shDest.Cells(i, 1) = tmpVar
        End If
        If InStr(txtLine, "&appelant=") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "&appelant="), Len(txtLine))
            tmpVar = Replace(tmpVar, "&appelant=", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            If IsNumeric(tmpVar) Then tmpVar = CLng(tmpVar)
            shDest.Cells(i, 2) = tmpVar
        End If
        If InStr(txtLine, "where id=") <> 0 Then
            tmpVar = Mid(txtLine, InStr(txtLine, "where id="), Len(txtLine))
            tmpVar = Replace(tmpVar, "where id=", "")
            tmpVar = Replace(Replace(tmpVar, vbCr, ""), "\", "")
            If IsNumeric(tmpVar) Then tmpVar = CLng(tmpVar)
            shDest.Cells(i, 3) = tmpVar
        End If
        If InStr(txtLine, "Fin de transaction") <> 0 Then
            i = i + 1
        End If
    Wend
    
    txtFile.Close
    Set txtFile = Nothing: Set myFso = Nothing
End Sub

PS : il faut adapter le nom de la feuille d'import, ainsi que le path du fichier texte.

A+
Miki
 

Pièces jointes

  • call.txt
    798 bytes · Affichages: 31

mromain

XLDnaute Barbatruc
Re : export de fichier txt vers excel

Re bonjour,

Si tu es sur Mac, c'est normal que le code ne fonctionne pas car il utilise un composant Windows - le Microsoft Scripting Runtime - pour lire le fichier texte.
Il faudrait essayer d'adapter le code (la partie ouvrir le fichier texte et lire chaque ligne) avec la méthode Open de VB. Un tutoriel est disponible ici.

Bon courage et A+ :)
 

Yaloo

XLDnaute Barbatruc
Re : export de fichier txt vers excel

Bonsoir tout le monde,

Avec une boucle différente de celle de CHALET, mais de toute façon, s'il peut y avoir 3 millions de lignes dans le fichier, c'est peine perdue :(

A+
 

Pièces jointes

  • boza.xls
    42.5 KB · Affichages: 40

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa