Récupération lignes .txt pour .xls

Résolu
bardinn Messages postés 8 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 12 mai 2011 - 14 avril 2011 à 11:16
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 15 avril 2011 à 09:34
Bonjour,

Je suis en train de réaliser un petit projet et j'ai un problème dans le traitement de la conversion d'un .txt en .xls. En effet j'ai un fichier texte qui se compose comme il suit :
Référence
Libellé
Débit
Crédit
Référence
Libellé
Débit
Crédit
...


Et je souhaiterai le mettre en .xls sous la forme
Référence | Libellé | Débit | Crédit
Référence | Libellé | Débit | Crédit
...


Le problème c'est que je n'arrive pas à obtenir un algorithme pour qu'il passe à la ligne suivante lorsqu'il arrive à une nouvelle référence.

Mon code :
Dim filesys, readfile, contents
        Dim j As Integer
        filesys = CreateObject("Scripting.FileSystemObject")
        readfile = filesys.OpenTextFile(fichiertemp, 1, False)
        Do While readfile.AtEndOfStream = False
            For j 0 To j 3 Step 1
                contents = readfile.ReadLine
                xlsfeuille.Cells(???, j).Value = contents 'le problème se situe ici

            Next j
        Loop
        readfile.close()



En vous remerciant par avance.

8 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 avril 2011 à 14:18
Bonjour,

Je n'avais pas fait attention, mais tu es en .NET, donc pourquoi utiliser un hideux "Scripting.FileSystemObject" au lieu des fonctions intégrées dans le framework ?

De plus, mets dans les propriétés de ton projet Option Explicit et option Strict à On, tu aura beaucoup d'erreur, mais ça rendra ton code plus clair.

Regardes aussi IO.File.ReadAllLines.

3
bardinn Messages postés 8 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 12 mai 2011
15 avril 2011 à 08:05
Dim fuu() As String
                    Dim j, i As Integer
                    fuu = System.IO.File.ReadAllLines(fichiertemp)'on fait un array de string de façon à pouvoir traiter chaque ligne facilement
                    i = 1
                    j = 1

                    For Each ligne In fuu 'on traite ligne par ligne dans le array

                        xlBook.ActiveSheet.Cells(i, j).Value = ligne
                        If j = 4 Then 'on arrive au bout de la ligne donc on le reinitialise à 1 et on passe à la ligne suivante
                            j = 1
                            i = i + 1
                        Else
                            j = j + 1
                        End If

                    Next

Voilà finalement comment j'ai traité ce cas, si cela peut aider quelqu'un.
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 avril 2011 à 12:48
Bonjour,

Fais un compteur de ligne, et à chaque fois que tu sort de ton "For j", tu l'incrémente.

0
bardinn Messages postés 8 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 12 mai 2011
14 avril 2011 à 13:59
Dim fichiertexte As String = "C:\..."  'chemin complet non affiché pour cet exemple
        fichiertexte = fichiertexte + DataGridView1.CurrentCell.Value
        fichiertexte = fichiertexte + ".txt"
        Dim fichiertemp As String = "C:\...\fichiertemp.txt" 'chemin complet non affiché pour cet exemple

        Using MyReader As New  _
Microsoft.VisualBasic.FileIO.TextFieldParser(fichiertexte)
            MyReader.TextFieldType = FileIO.FieldType.Delimited
            Dim sw As StreamWriter = System.IO.File.AppendText(fichiertemp)
            MyReader.SetDelimiters("  ")
            Dim currentRow As String()
            While Not MyReader.EndOfData
                currentRow = MyReader.ReadFields()
                Dim currentField As String
                For Each currentField In currentRow
                    If (currentField <> (" ")) Then
                        If (currentField <> ("")) Then
                            sw.WriteLine(currentField)
                            'ecrire directement dans la cellule excel (maintenant possible)
                        End If
                    End If
                Next
            End While
        End Using

        Dim xlApp As New Excel.Application
        Dim xlBook As Workbook
        Dim xlsfeuille As Excel.Worksheet
        Dim Nomxls As String
        xlApp = CreateObject("Excel.Application")
        xlBook = xlApp.Workbooks.Add
        xlsfeuille = xlBook.Worksheets(1)
        Nomxls = "C:\..."  'chemin complet non affiché pour cet exemple
        Nomxls = Nomxls + DataGridView1.CurrentRow.Cells(1).Value.ToString()
        Nomxls = Nomxls + ".xlsx"


Dim filesys, readfile, contents
        Dim j, i As Integer
        filesys = CreateObject("Scripting.FileSystemObject")
        readfile = filesys.OpenTextFile(fichiertemp, 1, False)
        i = 1
        Do While readfile.AtEndOfStream = False
            For j 1 To j 4 Step 1
                contents = readfile.ReadLine
                xlsfeuille.Cells(i, j).Value = contents
            Next j
            i = i + 1
        Loop
        readfile.close()
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bardinn Messages postés 8 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 12 mai 2011
14 avril 2011 à 14:02
(Petite erreur de manip, je ne voulais pas poster ça en deux fois)

Voici mon code avec l'incrémentation des lignes, le problème c'est que lorsque je lance cette fonction, le programme se bloque et ne fait plus rien, j'ai pourtant attendu voir si ce n'était pas le traitement qui durait trop longtemps.
Comment trouver se qui bloque ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 avril 2011 à 14:04
Bonjour,

As-tu essayer de faire du pas à pas ou à mettre des points d'arrêts afin de voir la localisation ?

Car en lisant le code, on ne voit pas tout.

0
bardinn Messages postés 8 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 12 mai 2011
14 avril 2011 à 14:07
il n'y a que le bout de code qui a été posté en premier qui ne fonctionnait pas, la première partie (même si c'est du bricolage fonctionne).
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 avril 2011 à 09:34
Bonjour,

Si ton problème est résolu, pense à mettre "Réponse acceptée" sur le ou les message(s) qui t'ont aidés.
De plus, ça facilitera les recherches des autres membres.

Bonne journée :)
0
Rejoignez-nous