IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Concatener fichier excel [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Concatener fichier excel
    Bonjour à tous,

    Voici mon besoin :
    J'ai un dossier, contenant des fichiers txt et des fichiers excel.
    Je voudrai parcourir ce dossier et copié bout à bout (je ne sais pas si concaténer est le terme exact), tous les fichiers excel présent dans le dossier, dans un fichier excel récapitulatif.
    J'entend par copié bout a bout, prendre le fichier n°1, le copié dans le fichier recap, prendre le fichier n°2 et le copié a la suite, et ainsi de suite.

    J'ai donc créer a l'avance mon fichier récap excel a un emplacement précis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fs As New FileStream(dossier_choisi & "\" & "recap" & ".xls", FileMode.Create, FileAccess.Write, FileShare.Write)
    J'arrive également à parcourir les fichiers de mon dossier, et à déterminer si ce sont des fichiers excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim dir As New DirectoryInfo(dossier_choisi)
                For Each fichier In dir.GetFiles
                    If fichier.Name.Contains(".xls") Then
                    'j'ouvre le fichier n°1
                    'je le copie dans le fichier recap
                    'je ferme le fichier n°1
                    'j'ouvre le fichier n°2
                    'je le copie à la fin du fichier recap
                     'etc....
    
                   End If
    
                Next
    Mon problème : J'arriverai assez facilement a ouvrir les fichiers et a copié le contenu (et encore c'est pas gagné), mais là où je ne vois pas comment faire c'est comment lui expliquer où il doit copier le contenu (ou plutôt comment ré-ouvrir le fichier recap avec le curseur pour le collage positionné à la fin). Je vois comment le faire avec des fichiers textes avec la méthode file.append mais là pour des fichiers excel je sèche.

    Information importante : mes fichiers excel n'ont aucune lignes vides, donc il devrait être possible de jouer avec les coordonnées de la première ligne vide, mais je ne vois pas du tout comment !

    Merci d'avance!

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    J'ai avancé dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Dim fs As New FileStream(dossier_choisi & "\" & "recap" & ".xls", FileMode.Create, FileAccess.Write, FileShare.Write)
                fs.Close()
     
                Dim dir As New DirectoryInfo(dossier_choisi)
     
                Dim xlApp As New Application
                Dim xlBook As Workbook 'ici fichier de reception des données
                Dim xlBook2 As Workbook 'ici variable qui acceuillera le fichier donneur de données
                Dim xlSheet As New Worksheet
     
                xlApp = CType(CreateObject("Excel.Application"), Application)
                xlBook = xlApp.Workbooks.Add
                xlSheet = CType(xlBook.Worksheets(1), Worksheet)
     
                Dim coordonnee_x As Integer = 1
                Dim coordonnee_y As Integer = 1
                Dim nombre_colonne = 10
     
     
                For Each fichier In dir.GetFiles
     
                    If fichier.Name.Contains(".xls") Then
     
                        xlBook2 = xlApp.Workbooks.Open(dossier_choisi & "\" & fichier.Name)
                        Dim nombre_ligne As Integer
                        For i = 1 To 1000 'arbitraire... à améliorer
                            If xlBook2.Worksheets(1).cells(i, 1).value = "" Then
                                nombre_ligne = i 
                                Exit For
                            End If
                        Next
     
                        xlBook2.Worksheets(1).Range(xlBook2.Worksheets(1).Cells(1, 1), xlBook2.Worksheets(1).Cells(nombre_ligne, 10)).Copy()
                        xlBook.Worksheets(1).paste(xlBook.Worksheets(1).cells(coordonnee_x, coordonnee_y))
                        coordonnee_x = coordonnee_x + nombre_ligne
     
                    End If
                Next
     
            End If
    Lors de l'éxecution du code, aucune erreur, mais problème : le fichier recap est vide...
    Les fichiers que je parcours existe bien, et je sais grâce a de nombreuses erreurs qui se sont produites, que les boucles sont bien parcourues. J'ai beau chercher, je ne vois pas où est le problème...
    Merci d'avance !

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Je n'avais pas fait gaffe qu'on était dans le forum VB Si tu trouves une source en C#, tu peux utiliser des outils de conversion C# vers VB.NET (ou l'inverse aussi) comme par exemple celui de Telerik. Il en existe d'autres.

    Après c'est comme traduire un texte d'une langue vers une autre en utilisant Google Translate par exemple, ça ne marche pas à tous les coups à 100%, mais ça fait l'affaire pour la plupart des bouts de code.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci bien Super utile en effet car de manière générale je trouve la solution a mes problèmes dans des langages que je ne connais pas.

    J'ai régler mon affaire, pour ceux que ça interesse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Dim dir As New DirectoryInfo(dossier_choisi)
     
                Dim xlApp As New Application
                Dim xlBook As Workbook 'ici fichier de reception des données
                Dim xlBook2 As Workbook 'ici variable qui accueuillera le fichier donneur de données
                Dim xlSheet As New Worksheet
     
                xlApp = CType(CreateObject("Excel.Application"), Application)
                xlBook = xlApp.Workbooks.Add
                xlSheet = CType(xlBook.Worksheets(1), Worksheet)
     
                Dim coordonnee_x As Integer = 0
                Dim coordonnee_y As Integer = 1
     
                Dim nombre_colonne = 10
     
                For Each fichier In dir.GetFiles
                    If fichier.Name.Contains(".xls") Then
                        xlBook2 = xlApp.Workbooks.Open(dossier_choisi & "\" & fichier.Name, IgnoreReadOnlyRecommended:=False)
                        Dim nombre_ligne As Integer
                        For i = 1 To 47828
                            If xlBook2.Worksheets(1).cells(i, 1).text = "" Then
                                nombre_ligne = i - 1
                                Exit For
                            End If
                        Next
     
                        xlBook2.Worksheets(1).Range(xlBook2.Worksheets(1).Cells(1, 1), xlBook2.Worksheets(1).Cells(nombre_ligne, 10)).Copy()
     
                        xlBook.Worksheets(1).paste(xlBook.Worksheets(1).cells(coordonnee_x + 1, coordonnee_y))
     
                        coordonnee_x = coordonnee_x + nombre_ligne
     
                    End If
                Next
                xlBook.SaveAs(dossier_choisi & "\recapitulatif.xls")
                xlApp.Visible = True
                xlApp.Quit()
                xlApp = Nothing
            End If

    Mais qui dit résolution de problème, dit nouveau problème : les fichiers que je fusionne sont créées dans une autre procédure comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim xlApp1 As New Application
            Dim xlBook1 As Workbook
            Dim xlSheet1 As Worksheet
            xlApp1 = CType(CreateObject("Excel.Application"), Application)
     
            xlBook1 = xlApp1.Workbooks.Add()
            xlSheet1 = CType(xlBook1.Worksheets(1), Worksheet)
     
            For i = 0 To mydatagridview16.Columns.Count - 1
                For j = 0 To mydatagridview16.RowCount - 1
                    xlSheet1.Cells(j + 1, i + 1).value = mydatagridview16.Rows(j).Cells(i).Value
                Next
            Next
     
            xlBook1.SaveAs(dossier_choisi & "\" & textbox_go.Text & ".xls")
            xlApp1.Quit()
            xlApp1 = Nothing
    Et ils sont créer par défaut (je suppose) en lecture seule, donc je n'arrive pas a les ouvrir avant la "fusion".
    Les exemples que j'ai vu pour éviter de créer des fichiers excel en lecture seule ne fonctionne pas chez moi : j'ai vu que l'on pouvait renseigner un ignorereadonlyrecommended = true par exemple, ou encore un simple readonly = false; mais le SaveAs ne permet pas ce genre de chose... Une idée de comment résoudre cela?


    EDIT : Je ne fermais pas le classeur... un simple xlbook.close suffit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Concatenation de fichiers Excel en VBA
    Par volganne dans le forum VBA Access
    Réponses: 1
    Dernier message: 01/07/2010, 14h26
  2. Enregistrement d'un fichier Excel par automation
    Par tiopan dans le forum Access
    Réponses: 2
    Dernier message: 04/12/2003, 19h57
  3. Sauvegarde fichier excel
    Par tiopan dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/10/2003, 13h36
  4. [Turbo Pascal] Utiliser un fichier Excel
    Par Lady dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 09/03/2003, 20h34
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo