Fouiller dossiers + récupérer des informations dans fichiers CSV

Lulu_bistify

XLDnaute Nouveau
Bonjour à tous !

Je me permets de faire appel à votre aide car je suis bloqué sur un petit programme que je dois réaliser en Visual Basic qui doit :
-Fouiller un dossier contenant des sous-dossiers contenants parfois des fichiers CSV
-Si fichiers CSV il y a, je dois prendre toutes les infos (elles sont sur la 1ère colonne)
-Et mettre toutes les infos dans 1 seul fichier CSV

Je débute en Visual Basic, j'ai récupéré le TP sur l'arborescence des fichiers sur le site du zéro en me disant:
- je scanne tout, je regarde à chaque fois qu'un fichier termine par ".csv", je sauvegarde dans un tableau puis après pour chaque entrée dans le tableau j'ouvre le lien je copie tout et je colle.

Malhereusement il ne fait pas ce que je demande, je me demandais pourquoi ? (j'ai pas encore fait la partie Excel, je voulais dans un premier temps afficher dans une textbox les différents fichiers CSV.)

Merci d'avance,
Lulu

Code:
Imports System.IO

Public Class Form1

    Dim RepertoireALister As String
    Dim nombrecsv As Integer = 0
    Dim resultat As Integer = 0
    Dim listefichierscsv() As String
    Dim message, title, defaultValue As String
    Dim myValue As Object





    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        message = "Veuillez entrer le chemin du dossier à traiter"

        title = "Dossier concerné"
        defaultValue = "1"
        myValue = InputBox(message, title, defaultValue)

        RepertoireALister = myValue

        'Définit le premier noeud
        Me.TV_ARBORESCENCE.TopNode = Me.TV_ARBORESCENCE.Nodes.Add(RepertoireALister, RepertoireALister)

        'Arborescence du premier noeud
        For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)
            Me.TV_ARBORESCENCE.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))
            'Récursif


            ListeArborescenceDossier(Repertoire, Me.TV_ARBORESCENCE.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(RepertoireALister)

            Me.TV_ARBORESCENCE.TopNode.Nodes.Add(Path.GetFileName(Fichier))

           
        Next

        Me.L_nombrecsv2.Text = nombrecsv.ToString

        For i As Integer = 0 To listefichierscsv.Length - 1

            TB_fichiersCSV.Text = listefichierscsv(i)

        Next

    End Sub

    Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)
        'Recupère le node dans lequel on est
        Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)
        'Répertoires de ce noeud
        For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)
            Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))
            'Récursif
            ListeArborescenceDossier(Repertoire, Node)
        Next

        'Fichiers de ce noeud

        For Each Fichier As String In Directory.GetFiles(RepertoireActuel)
            Node.Nodes.Add(Path.GetFileName(Fichier))

            If resultat = InStr(Path.GetFileName(Fichier), ".CSV") = 0 Then

                ReDim listefichierscsv(nombrecsv)
                listefichierscsv(nombrecsv) = Path.GetFileName(Fichier).ToString
                nombrecsv = nombrecsv + 1

                resultat = 1


            End If
        Next
    End Sub
 

Pièces jointes

  • LOGS.zip
    18.9 KB · Affichages: 50

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Code:
Imports System.IO
Imports System.Net.Mime.MediaTypeNames
Imports Microsoft.Office.Interop

Public Class Form1

   
    Dim nomcheminfichierexcel As String
    Const RepertoireALister As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Définit le premier noeud
        Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(RepertoireALister, RepertoireALister)

        'Arborescence du premier noeud
        For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)
            Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))
            'Récursif
            ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)
        Next
        'Fichiers du premier noeud
        For Each Fichier As String In Directory.GetFiles(RepertoireALister)
            Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))
        Next

       

    End Sub

    Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)
        'Recupère le node dans lequel on est
        Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)
        'Répertoires de ce noeud
        For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)
            Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))
            'Récursif
            ListeArborescenceDossier(Repertoire, Node)
        Next
        'Fichiers de ce noeud
        For Each Fichier As String In Directory.GetFiles(RepertoireActuel)
            Node.Nodes.Add(Path.GetFileName(Fichier))

            If InStr(Path.GetFileName(Fichier), ".CSV") Then
                Me.LB_ListeCSV.Items.Add(Path.GetFileName(Fichier))


            End If
        Next
    End Sub

    Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

    End Sub

    Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click

        Dim appExcel, appExcel2 As Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wbExcel, wbExcel2 As Microsoft.Office.Interop.Excel.Workbook
        Dim wsExcel, wsExcel2 As Microsoft.Office.Interop.Excel.Worksheet

        appExcel = New Excel.Application
        wbExcel = appExcel.Workbooks.Add(1)
        wsExcel = wbExcel.ActiveSheet

       


        For I As Integer = 0 To Me.LB_ListeCSV.Items.Count
            Dim J As Integer = 0

            appExcel2 = New Excel.Application

            nomcheminfichierexcel = Me.LB_ListeCSV.Items.ToString

            wbExcel2 = appExcel.Workbooks.Open(nomcheminfichierexcel)

            wsExcel2 = wbExcel.Worksheets(1)

            wbExcel.Sheets.Add(After:=I)

            wbExcel.ActiveSheet.Name = wbExcel2.Sheets(nomcheminfichierexcel)

            J = wbExcel2.rows.Count


            wbExcel = wbExcel2.Sheets(nomcheminfichierexcel).Range("A1" & J).value


            Dim strFileName As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"
            Dim blnFileOpen As Boolean = False
            Try
                Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
                fileTemp.Close()
            Catch ex As Exception
                blnFileOpen = False
            End Try

            If System.IO.File.Exists(strFileName) Then
                System.IO.File.Delete(strFileName)
            End If

            wbExcel.SaveAs(strFileName)
            appExcel.Workbooks.Open(strFileName)
            appExcel.Visible = True


        Next




    End Sub
End Class


Voila j'ai été un peu plus loin, je me demande maintenant si je fais bien le truc parce que j'ai "Error	4	Reference to class 'ApplicationClass' is not allowed when its assembly is linked using No-PIA mode.	C:\Documents and Settings\uyttenho\My Documents\Visual Studio 2010\Projects\AfLOG\AfLOG\Form1.Designer.vb	106	13	AfLOG
"

et quand je lance j'ai une invalidcastexception à cette ligne là : " wsExcel = wbExcel.ActiveSheet"
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Voila maintenant j'arrive à créer mon fichier Excel "LOGS" dans lequel je veux coller toutes les informations contenues dans mes CSV.
J'ai encore un peu de mal à faire la suite, je vais chercher sur le net quelques infos, si vous avec une idée merci de me la faire parvenir :)



Imports System.IO
Imports System.Net.Mime.MediaTypeNames
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class Form1

Dim name_path_savefile As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"
Dim name_path_csv As String
Const RepertoireALister As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'Définit le premier noeud

Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(RepertoireALister, RepertoireALister)

'Arborescence du premier noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)

Next

'Fichiers du premier noeud

For Each Fichier As String In Directory.GetFiles(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))

Next



End Sub

Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)

'Recupère le node dans lequel on est

Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)

'Répertoires de ce noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)

Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Node)

Next

'Fichiers de ce noeud

For Each Fichier As String In Directory.GetFiles(RepertoireActuel)

Node.Nodes.Add(Path.GetFileName(Fichier))

If InStr(Path.GetFileName(Fichier), ".CSV") Then

Me.LB_ListeCSV.Items.Add(Path.GetFileName(Fichier))


End If

Next

End Sub

Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

End Sub

Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click


' Dim appExcel, appExcel2 As New Microsoft.Office.Interop.Excel.Application
' Dim wbExcel, wbExcel2 As Microsoft.Office.Interop.Excel.Workbook
' Dim wsExcel, wsExcel2 As Microsoft.Office.Interop.Excel.Worksheet


Dim xlApp, xlApp2 As Excel.Application
Dim xlWorkBook, xlWorkBook2 As Excel.Workbook
Dim xlWorkSheet, xlWorkSheet2 As Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value


xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets("sheet1")
xlWorkSheet.Cells(1, 1) = "http://vb.net-informations.com"
xlWorkSheet.SaveAs(name_path_savefile)



For I As Integer = 0 To Me.LB_ListeCSV.Items.Count

Dim J As Integer = 0

xlApp2 = New Excel.Application 'création nouveau fichier xls

name_path_csv = Me.LB_ListeCSV.Items.ToString 'on récupère le chemin du fichier contenu dans ListeCSV

releaseObject(xlWorkBook2)
releaseObject(xlWorkSheet2)


xlWorkBook2 = xlApp2.Workbooks.Open(name_path_csv) 'on ouvre le csv avec le nom du chemin

xlWorkSheet2 = xlWorkBook2.Sheets("sheet1")

' xlWorkSheet2 = xlWorkBook.Worksheets(1) 'on sélectionne la première page (je pense que c'est pas nécessaire)

xlWorkBook.Sheets.Add(After:="sheet" & I) 'on ajoute une feuille dans le XLS APRES les autres

xlWorkBook.ActiveSheet.Name = xlWorkSheet2.Sheets(name_path_csv) 'on donne au nom de la feuille excel, le nom du chemin

J = xlWorkBook2.rows.Count 'on compte le nombre de lignes dans le CSV

xlWorkBook = xlWorkBook2.Sheets(name_path_csv).Range("A1" & ":A" & J).value 'on copie colle ce qui se trouve sur le CSV

xlWorkBook2.Close()
Next














xlWorkBook.Close()
xlApp.Quit()

releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)

MsgBox("Excel file created , you can find the file in" & name_path_savefile)
End Sub

Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try

End Sub




' Dim strFileName As String = "fichierlog"
' Dim blnFileOpen As Boolean = False
' Try
' Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
' fileTemp.Close()
' Catch ex As Exception
' blnFileOpen = False
' End Try

' If System.IO.File.Exists(strFileName) Then
' System.IO.File.Delete(strFileName)
' End If

' wbExcel = New Workbook

' wbExcel.SaveAs(strFileName)
' appExcel.Workbooks.Open(strFileName)
' appExcel.Visible = True

' ' appExcel = CType(CreateObject("Excel.Application"), Excel.Application)
' 'wbExcel = CType(appExcel.Workbooks.Add, Excel.Workbook)
' 'wsExcel = CType(wbExcel.Worksheets(1), Excel.Worksheet)


' For I As Integer = 0 To Me.LB_ListeCSV.Items.Count

' Dim J As Integer = 0

' appExcel2 = New Excel.Application 'création nouveau fichier xls

' name_path_csv = Me.LB_ListeCSV.Items.ToString 'on récupère le chemin du fichier contenu dans ListeCSV

' wbExcel2 = appExcel2.Workbooks.Open(name_path_csv) 'on ouvre le csv avec le nom du chemin

' wsExcel = New Worksheet
' wbExcel2 = New Workbook
' wsExcel2 = New Worksheet
' wsExcel2 = wbExcel.Worksheets(1) 'on sélectionne la première page (je pense que c'est pas nécessaire)

' wbExcel.Sheets.Add(After:=I) 'on ajoute une feuille dans le XLS APRES les autres

' wbExcel.ActiveSheet.Name = wbExcel2.Sheets(name_path_csv) 'on donne au nom de la feuille excel, le nom du chemin

' J = wbExcel2.rows.Count 'on compte le nombre de lignes dans le CSV

' wbExcel = wbExcel2.Sheets(name_path_csv).Range("A1" & ":A" & J).value 'on copie colle ce qui se trouve sur le CSV


' 'Sauvegarder le fichier XLS



' Next




'End Sub
End Class
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

J'ai réussi à créer mon fichier Excel sur lequel je veux copier tous les informations des fichiers CSV. J'ai aussi corrigé un petit problème de chemin (je prenais pas le "full path"). Mais maintenant il me fait une "listbox +collection" error au niveau du name_path_csv .

Merci d'avance pour toute aide éventuelle ! :)

Code:
Imports System.IO
'Imports System.Net.Mime.MediaTypeNames
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class Form1

    Dim name_path_csv As String
    Const RepertoireALister As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      



        'Définit le premier noeud

        Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(RepertoireALister, RepertoireALister)

        'Arborescence du premier noeud

        For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)

            Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

            'Récursif

            ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)

        Next

        'Fichiers du premier noeud

        For Each Fichier As String In Directory.GetFiles(RepertoireALister)

            Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))

        Next



    End Sub

    Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)

        'Recupère le node dans lequel on est

        Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)

        'Répertoires de ce noeud

        For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)

            Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

            'Récursif

            ListeArborescenceDossier(Repertoire, Node)

        Next

        'Fichiers de ce noeud

        For Each Fichier As String In Directory.GetFiles(RepertoireActuel)

            Node.Nodes.Add(Path.GetFileName(Fichier))


            If InStr(Path.GetFileName(Fichier), ".CSV") Then

                Me.LB_ListeCSV.Items.Add(Path.GetFullPath(Fichier))



            End If

        Next

    End Sub

    Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

    End Sub

    Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click
        
        Dim name_path_savefile As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"

       


        Dim xlApp, xlApp2 As Excel.Application
        Dim xlWorkBook, xlWorkBook2 As Excel.Workbook
        Dim xlWorkSheet, xlWorkSheet2 As Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim str As String
        Dim xl As Microsoft.Office.Interop.Excel.Application

        xlApp = New Excel.Application
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
        xlWorkSheet.Cells(1, 1) = "http://vb.net-informations.com"


        xl.DisplayAlerts = False
        xlWorkSheet.SaveAs(name_path_savefile)
        xl.DisplayAlerts = True
      

        For I As Integer = 0 To Me.LB_ListeCSV.Items.Count

            Dim J As Integer = 0
            

            xlApp2 = New Excel.Application

            name_path_csv = Me.LB_ListeCSV.Items.ToString 'on récupère le chemin du fichier contenu dans ListeCSV


            xlWorkBook2 = xlApp2.Workbooks.Open(name_path_csv) 'on ouvre le csv avec le nom du chemin

            xlWorkSheet2 = xlWorkBook2.Sheets("Sheet1")

            J = xlWorkBook2.rows.Count 'on compte le nombre de lignes dans le CSV





            ' xlWorkSheet2 = xlWorkBook.Worksheets(1) 'on sélectionne la première page (je pense que c'est pas nécessaire)

            xlWorkBook.Sheets.Add(After:="Sheet" & I + 1) 'on ajoute une feuille dans le XLS APRES les autres

            str = name_path_csv.Substring(-12, 12)

            xlWorkBook.ActiveSheet.Name = str 'on donne au nom de la feuille excel, le nom du fichier csv


            xlWorkBook = xlWorkBook2.Sheets(name_path_csv).Range("A1" & ":A" & J).value 'on copie colle ce qui se trouve sur le CSV

            xlWorkBook2.Close()

            xlApp2.Quit()

            releaseObject(xlApp2)
            releaseObject(xlWorkBook2)


        Next

        xlWorkBook.Close()
        xlApp.Quit()

        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)

        MsgBox("Excel file created , you can find the file in" & name_path_savefile)
    End Sub

    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try

    End Sub



    
End Class
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Voila, j'ai encore un peu retravaillé, maintenant les chemins des fichiers CSV sont écrits et lus depuis le fichier TXT "LOGS" (ca marche ) mais j'ai un problème à la ligne "xlWorkSheet2 = xlWorkBook2.Sheets("sheet1")" avec une COMexception :)

Mon objectif reste toujours le même, si vous avez des informations qui pourraient être utiles, je serais heureux de les connaitre :)

Merci d'avance,


Imports System.IO
'Imports System.Net.Mime.MediaTypeNames
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class Form1

Dim MonFichier As IO.FileStream
Dim name_path_csv As String
Const RepertoireALister As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load





'Définit le premier noeud

Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(RepertoireALister, RepertoireALister)

'Arborescence du premier noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)

Next

'Fichiers du premier noeud

For Each Fichier As String In Directory.GetFiles(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))




Next



End Sub

Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)

'Recupère le node dans lequel on est

Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)

'Répertoires de ce noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)

Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Node)

Next

'Fichiers de ce noeud

For Each Fichier As String In Directory.GetFiles(RepertoireActuel)

Node.Nodes.Add(Path.GetFileName(Fichier))


If InStr(Path.GetFileName(Fichier), ".CSV") Then

Me.LB_ListeCSV.Items.Add(Path.GetFullPath(Fichier))

écriretxt("C:\Documents and Settings\uyttenho\My Documents\LOGS.txt", Path.GetFullPath(Fichier))

End If

Next

End Sub

Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

End Sub

Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click

Dim name_path_savefile As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"




Dim xlApp, xlApp2 As Excel.Application
Dim xlWorkBook, xlWorkBook2 As Excel.Workbook
Dim xlWorkSheet, xlWorkSheet2 As Excel.Worksheet
Dim misValue As Object = System.Reflection.Missing.Value
Dim str As String
Dim xl As Microsoft.Office.Interop.Excel.Application

xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets("sheet1")
xlWorkSheet.Cells(1, 1) = "http://vb.net-informations.com"

xl = New Microsoft.Office.Interop.Excel.Application

xl.DisplayAlerts = False
xlWorkSheet.SaveAs(name_path_savefile)
xl.DisplayAlerts = True


For I As Integer = 0 To Me.LB_ListeCSV.Items.Count

Dim J As Integer = 0


xlApp2 = New Excel.Application

xlWorkBook2 = xlApp2.Workbooks.Add(misValue)

'name_path_csv = Me.LB_ListeCSV.Items.ToString 'on récupère le chemin du fichier contenu dans ListeCSV

name_path_csv = liretxt("C:\Documents and Settings\uyttenho\My Documents\LOGS.txt", I)

xlWorkBook2 = xlApp2.Workbooks.Open(name_path_csv) 'on ouvre le csv avec le nom du chemin

xlWorkSheet2 = xlWorkBook2.Sheets("sheet1")

J = xlWorkSheet2.Rows.Count 'on compte le nombre de lignes dans le CSV





'xlWorkSheet2 = xlWorkBook.Worksheets(1) 'on sélectionne la première page (je pense que c'est pas nécessaire)

xlWorkBook.Sheets.Add(After:="Sheet" & I + 1) 'on ajoute une feuille dans le XLS APRES les autres

str = name_path_csv.Substring(-12, 12)

xlWorkBook.ActiveSheet.Name = str 'on donne au nom de la feuille excel, le nom du fichier csv


xlWorkBook = xlWorkBook2.Sheets(name_path_csv).Range("A1" & ":A" & J).value 'on copie colle ce qui se trouve sur le CSV

xlWorkBook2.Close()

xlApp2.Quit()

releaseObject(xlApp2)
releaseObject(xlWorkBook2)
releaseObject(xlWorkSheet2)


Next

xlWorkBook.Close()
xlApp.Quit()

releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)

MsgBox("Excel file created , you can find the file in" & name_path_savefile)
End Sub

Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try

End Sub

Sub écriretxt(ByVal cheminfichier As String, ByVal txtaecrire As String)


Dim MonFichier As IO.StreamWriter = New IO.StreamWriter(cheminfichier, IO.FileMode.OpenOrCreate)

MonFichier.WriteLine(txtaecrire)
MonFichier.Close()

End Sub

Function liretxt(ByVal cheminfichier As String, ByVal lignealire As Integer, Optional ByVal ByValtxtalire As String = "")
Dim chemin_fichier_csv As String
Dim monfichier As IO.StreamReader = New IO.StreamReader(cheminfichier)
Dim ligne As String


For x As Integer = 0 To lignealire

'ligne = ""
ligne = monfichier.ReadLine()

If (x = lignealire) Then
chemin_fichier_csv = ligne
End If

Next

monfichier.Close()



Return chemin_fichier_csv

End Function

End Class
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Voila, j'ai retravaillé dessus, je passe par un fichier txt pour stocker tous les chemins des csv, puis je vais les lire un par un et voir à chaque fois dedans ce qu'il y a, j'essaie de les copier dans un xls avec à chaque fois un nouvel onglet.

Cependant maintenant je n'arrive pas à créer des feuilles en plus et je n'arrive pas à les remplir :/

D'avance merci pour votre aide :)


Imports System.IO
'Imports System.Net.Mime.MediaTypeNames
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class Form1

Dim misValue As Object = System.Reflection.Missing.Value
Dim MonFichier As IO.FileStream
Dim name_path_csv As String
Const RepertoireALister As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load





'Définit le premier noeud

Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(RepertoireALister, RepertoireALister)

'Arborescence du premier noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)

Next

'Fichiers du premier noeud

For Each Fichier As String In Directory.GetFiles(RepertoireALister)

Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))




Next



End Sub

Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)

'Recupère le node dans lequel on est

Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)

'Répertoires de ce noeud

For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)

Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

'Récursif

ListeArborescenceDossier(Repertoire, Node)

Next

'Fichiers de ce noeud

For Each Fichier As String In Directory.GetFiles(RepertoireActuel)

Node.Nodes.Add(Path.GetFileName(Fichier))


If InStr(Path.GetFileName(Fichier), ".CSV") Then

Me.LB_ListeCSV.Items.Add(Path.GetFullPath(Fichier))

écriretxt("C:\Documents and Settings\uyttenho\My Documents\LOGS.txt", Path.GetFullPath(Fichier))

End If

Next

End Sub

Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

End Sub

Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click

Dim name_path_savefile As String = "C:\Documents and Settings\uyttenho\My Documents\LOGS"




Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet

'Dim xlApp2 As Excel.Application
'Dim xlWorkBook2 As Excel.Workbook
'Dim xlWorkSheet2 As Excel.Worksheet

Dim str As String
Dim xl As Microsoft.Office.Interop.Excel.Application

xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Add(misValue)
xlWorkSheet = xlWorkBook.Sheets("sheet1")
' xlWorkSheet.Cells(1, 1) = "Essai"

xl = New Microsoft.Office.Interop.Excel.Application

xl.DisplayAlerts = False
xlWorkSheet.SaveAs(name_path_savefile)
xl.DisplayAlerts = True

' xlApp2 = New Excel.Application





For I As Integer = 0 To Me.LB_ListeCSV.Items.Count - 1

Dim J As Integer = 0




'xlWorkBook2 = xlApp2.Workbooks.Add(misValue)

'name_path_csv = Me.LB_ListeCSV.Items.ToString 'on récupère le chemin du fichier contenu dans ListeCSV

name_path_csv = liretxt("C:\Documents and Settings\uyttenho\My Documents\LOGS.txt", I)

' xlWorkBook2 = xlApp2.Workbooks.Open(name_path_csv) 'on ouvre le csv avec le nom du chemin

' xlWorkSheet2 = xlWorkBook2.Sheets("sheet1")

'J = xlWorkSheet2.Rows.Count 'on compte le nombre de lignes dans le CSV

Dim lastSheet As Object = xlWorkBook.Sheets(xlWorkBook.Sheets.Count)

'xlWorkBook = xlApp.Workbooks.Add(misValue)

xlWorkSheet = CType(xlWorkBook.Sheets.Add(After:=lastSheet), Excel.Worksheet)

'xlWorkSheet = xlWorkBook.Sheets.Add(After:="Sheet" & I + 1)

lirecsv(name_path_csv, xlWorkSheet, I)




''xlWorkSheet2 = xlWorkBook.Worksheets(1) 'on sélectionne la première page (je pense que c'est pas nécessaire)

'xlWorkBook.Sheets.Add("sheet" & I + 1)

'str = name_path_csv.Substring(-12, 12)

'xlWorkBook.ActiveSheet.Name = str 'on donne au nom de la feuille excel, le nom du fichier csv


'xlWorkSheet = xlWorkBook.Sheets(name_path_csv).Range("A1" & ":A" & J).value 'on copie colle ce qui se trouve sur le CSV




Next
' xlWorkBook2.Close()

'xlApp2.Quit()

'releaseObject(xlApp2)
'releaseObject(xlWorkBook2)
' releaseObject(xlWorkSheet2)

xlWorkBook.Close()
xlApp.Quit()

releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)

MsgBox("Excel file created , you can find the file in" & name_path_savefile)
End Sub

Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try

End Sub

Sub écriretxt(ByVal cheminfichier As String, ByVal txtaecrire As String)


Dim MonFichier As IO.StreamWriter = New IO.StreamWriter(cheminfichier, IO.FileMode.OpenOrCreate)

MonFichier.WriteLine(txtaecrire)
MonFichier.Close()

End Sub

Function liretxt(ByVal cheminfichier As String, ByVal lignealire As Integer, Optional ByVal ByValtxtalire As String = "")
Dim chemin_fichier_csv As String
Dim lecteur As IO.StreamReader = New IO.StreamReader(cheminfichier)
Dim ligne As String


For x As Integer = 0 To lignealire

'ligne = ""
ligne = lecteur.ReadLine()

If (x = lignealire) Then
chemin_fichier_csv = ligne
End If

Next
lecteur.Close()



Return chemin_fichier_csv

End Function


Sub lirecsv(ByVal cheminfichiercsv As String, ByVal xlworksheetfinal As Excel.Worksheet, ByVal j As Integer)


MsgBox(j + 1)

Dim monlecteur As IO.StreamReader = New IO.StreamReader(cheminfichiercsv)
'Dim xlworksheetfinal As Excel.Worksheet
Dim str As String
Dim lignecsv As String
Dim i As Integer
Dim k As Integer
Dim c As Char





i = cheminfichiercsv.LastIndexOf("\")




str = cheminfichiercsv.Substring(i + 1)


'on donne au nom de la feuille excel, le nom du fichier csv
xlworksheetfinal.Name = str

While Not monlecteur.ReadLine() = "" 'monlecteur.ReadLine = ""


lignecsv = monlecteur.ReadLine()

xlworksheetfinal.Cells(i, 1) = lignecsv


i = i + 1




End While


End Sub



End Class
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

J'ai réussi :), pour ceux que ça intéresse voila le code :

Code:
Imports System.IO
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class Form1

    Dim misValue As Object = System.Reflection.Missing.Value
    Dim Myfilestream As IO.FileStream
    Dim name_path_csv As String
    Dim folder_you_want_to_list As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        folder_you_want_to_list = InputBox("Quel dossier analyser ?", "c:\")

        Me.TV_Arborescence.TopNode = Me.TV_Arborescence.Nodes.Add(folder_you_want_to_list, folder_you_want_to_list)

        For Each Repertoire As String In Directory.GetDirectories(folder_you_want_to_list)

            Me.TV_Arborescence.TopNode.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

            ListeArborescenceDossier(Repertoire, Me.TV_Arborescence.TopNode)

        Next

        For Each Fichier As String In Directory.GetFiles(folder_you_want_to_list)

            Me.TV_Arborescence.TopNode.Nodes.Add(Path.GetFileName(Fichier))

        Next
    End Sub

    Sub ListeArborescenceDossier(ByVal RepertoireActuel As String, ByVal NodeActuel As TreeNode)

        Dim Node As TreeNode = NodeActuel.Nodes(RepertoireActuel)

        For Each Repertoire As String In Directory.GetDirectories(RepertoireActuel)

            Node.Nodes.Add(Repertoire, Path.GetFileName(Repertoire))

            ListeArborescenceDossier(Repertoire, Node)

        Next

        For Each File As String In Directory.GetFiles(RepertoireActuel)

            Node.Nodes.Add(Path.GetFileName(File))

            If InStr(Path.GetFileName(File), ".CSV") Then

                Me.LB_ListeCSV.Items.Add(Path.GetFullPath(File))

                write_list_of_CSV_in_txt(folder_you_want_to_list & ".txt", Path.GetFullPath(File))

            End If

        Next

    End Sub

    Private Sub LB_ListeCSV_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LB_ListeCSV.SelectedIndexChanged

    End Sub

    Private Sub B_Copiercollercsv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Copiercollercsv.Click

        Dim name_path_savefile As String = folder_you_want_to_list
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim xlApp As Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet
        Dim xl As Microsoft.Office.Interop.Excel.Application

        xlApp = New Excel.Application
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
        xlWorkSheet.Cells(1, 1) = "Essai"

        xl = New Microsoft.Office.Interop.Excel.Application

        xl.DisplayAlerts = False
        xlWorkSheet.SaveAs(name_path_savefile)
        xl.DisplayAlerts = True

        xlWorkBook.Sheets("sheet2").delete()
        xlWorkBook.Sheets("sheet3").delete()

        For I As Integer = 0 To Me.LB_ListeCSV.Items.Count - 1

            Dim str2 As String
            Dim J As Integer = 0
            Dim k As Integer = 0
            Dim lastSheet As Object = xlWorkBook.Sheets(xlWorkBook.Sheets.Count)

            name_path_csv = liretxt(folder_you_want_to_list & ".txt", I)

            read_and_paste_finaltxt(name_path_csv, folder_you_want_to_list & "total.txt")

            xlWorkBook.Worksheets.Add(Before:=lastSheet)

            Dim monlecteur As IO.StreamReader = New IO.StreamReader(name_path_csv)

            Dim lignecsv As String

            J = name_path_csv.LastIndexOf("\")

            str2 = name_path_csv.Substring(J + 1)


            xlWorkBook.ActiveSheet.name = str2

            While Not monlecteur.EndOfStream

                lignecsv = monlecteur.ReadLine()

                xlWorkBook.ActiveSheet.Cells((k + 1), 1) = lignecsv

                k = k + 1

            End While

        Next

        xlWorkBook.Close()
        xlApp.Quit()

        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)

        MsgBox("Excel file created , you can find the file in" & name_path_savefile)

    End Sub

    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try

    End Sub

    Sub write_list_of_CSV_in_txt(ByVal cheminfichier As String, ByVal txtaecrire As String)

        Dim filestream As IO.StreamWriter = New IO.StreamWriter(cheminfichier, IO.FileMode.OpenOrCreate)

        filestream.WriteLine(txtaecrire)
        filestream.Close()

    End Sub

    Function liretxt(ByVal path_file_txt As String, ByVal lignealire As Integer, Optional ByVal ByValtxtalire As String = "")

        Dim streamreader As IO.StreamReader = New IO.StreamReader(path_file_txt)
        Dim ligne As String
        Dim path_file_csv As String = ""


        For x As Integer = 0 To lignealire
            ligne = streamreader.ReadLine()

            If (x = lignealire) Then
                path_file_csv = ligne
            End If

        Next
        streamreader.Close()

        Return path_file_csv

    End Function


    Sub lirecsv(ByVal path_csv As String, ByVal xlworksheetfinal As Excel.Worksheet, ByVal j As Integer)

        MsgBox(j + 1)

        Dim monlecteur As IO.StreamReader = New IO.StreamReader(path_csv)

        Dim str As String
        Dim lignecsv As String
        Dim i As Integer

        i = path_csv.LastIndexOf("\")

        str = path_csv.Substring(i + 1)

        xlworksheetfinal.Name = str

        While Not monlecteur.EndOfStream

            lignecsv = monlecteur.ReadToEnd()

            xlworksheetfinal.Cells(i, 1) = lignecsv

            i = i + 1

        End While

    End Sub

    Sub read_and_paste_finaltxt(ByVal path_CSV As String, ByVal path_finaltxt As String)

        Dim myreader As IO.StreamReader = New IO.StreamReader(path_CSV)
        Dim mywriter As IO.StreamWriter = New IO.StreamWriter(path_finaltxt, IO.FileMode.OpenOrCreate)
        Dim line_from_csv As String
        Dim i As Integer

        While Not myreader.EndOfStream 'monlecteur.ReadLine = ""

            line_from_csv = myreader.ReadToEnd()

            mywriter.WriteLine(line_from_csv)

            i = i + 1

        End While

        myreader.Close()
        mywriter.Close()

    End Sub

End Class
 

C4rtoons

XLDnaute Junior
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Bonjour,
Merci pour ton post! A ne surtout pas supprimer :)
J'ai une question: je cherche à faire plus ou moins la même chose que toi à quelque différences pres!
1) je souhaite copier que certaine cellules de mes fichiers
2) mes fichiers sont tous dans le même répertoire et commence tous par le meme caractère :"VT"
3) je veux: prendre copier les données dans le répertoire dans 1 seuel fichier source

Peux-tu m'aider dans cette recherche?
 

Lulu_bistify

XLDnaute Nouveau
Re : Fouiller dossiers + récupérer des informations dans fichiers CSV

Salut C4rtoons!

Pas de soucis je comptais pas le supprimer ;-) (juste supprimer mon dernier post :p)
1)Tu pourrais m'expliquer un peu ce que tu désires faire comme ça je peux t'aider efficacement ?
2)Je vais te fournir mon dernier code par mp comme ça tu pourras te faire une idée, tu fais une inputbox qui va demander le chemin du dossier à fouiller. Ensuite si tu veux que les fichiers "VT" tu vas voir dans mon code, je regarde dans le chemin du fichier, je vais voir pour récupérer les dossiers qui ont "VT" dans le nom de leur chemin.
3)Tu veux récupérer les infos et les mettre dans un fichier source: pas de soucis, quel fichier ? un TXT, un XLS, ...

Si tu veux des informations plus précises, pose des questions qui le sont aussi ;-)
Lulu
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado