Importer fusionner fichier csv,txt

Bonjour à tous

Voilà je vous expose mon problème

J’ai 6 fichiers : 2 csv Disons que je nomme mes fichier csv « FIC1 » et « FIC2 »

2 txt avec séparateurs « tabulation » Disons que je nomme mes fichier txt « FIC1A » et « FIC2B »

2 txt avec séparateurs « point-virgule » Disons que je nomme mes fichier csv « FICA » et « FICB »

J’aimerai les fusionner FIC1, FIC2B et FICA à partir d’un classeur Excel nommé « résultat » dans une feuille nommé au mois en cour de l’année en cour avec TDM au début (TDM_09/2016)

J’aimerai les fusionner FIC2, FIC1A et FICB dans ce même classeur mais sur une autre feuille nommé au mois en cour de l’année en cour avec TM au début (TM_09/2016)

Ces fichiers sont dans un même dossier qui ne comporte que ces fichiers

FIC1 possède des données de la colonne A à N (les colonnes B à H et J et L à N sont à supprimer)

FIC2 possède des données de la colonne A à AB (les colonnes B à C et I à AB sont à supprimer)

FIC1A possède des données de la colonne A à M (les colonnes A et H à M sont à supprimer)

FIC2B possède des données de la colonne A à I (les colonnes A et C et G sont à supprimer)

FICA possède des données de la colonne A à N (les colonnes B à H et J et L à N sont à supprimer)

FICB possède des données de la colonne A à AB (les colonnes B à C et I à AB sont à supprimer)

Dans les 2 feuille de fusion des fichiers après avoir supprimé les colonnes inutile la colonne A devient naturellement la colonne contenant les Identifiants commun à tous les fichiers et tous les reste des données des colonnes suivante sont cohérente (le choix des intitulé de colonnes ont peu d’importance)

Pour la fusion les données doivent s’additionner dans les colonnes par identifiant (les identifiants ne sont pas forcément dans le même ordre dans les fichiers)

J’ai essayé plusieurs macros mais à chaque fois un classeur s’ouvre (au nom du fichier que je cherche à récupérer) et ma feuille dans mon classeur initial se nomme automatiquement au nom du fichier que je cherche à traiter

Je m’en remets à vous car je coince sérieusement sur ça

Bonjour,

Une piste avec lecture séquentielle de fichier texte :

Sub Lire(Fichier As String, Separateur As String)

    Dim Ligne As String
    Dim I As Long
    Dim J As Long

    'recherche la dernière ligne non vide sur colonne A de la feuille "Feuil1"
    J = Worksheets("Feuil1").Cells(.Rows.Count, 1).End(xlUp).Row

    'ouvre le fichier en lecture
    Open Fichier For Input As #1

        'parcours toutes le lignes du fichier
        Do While Not EOF(1)

            'récupère chaque ligne
            Line Input #1, Ligne

            If Ligne <> "" Then

                J = J + 1

                'inscrit ces valeurs dans la feuille "Feuil1" ligne par ligne dans chaque colonne
                For I = 0 To UBound(Split(Ligne, Separateur))

                    Worksheets("Feuil1").Cells(J, I + 1) = Split(Ligne, Separateur)(I)

                Next I

            End If

        Loop

    Close #1

    Erase Tbl

End Sub

Tu appelles cette proc de cette façon en adaptant le nom du fichier et le séparateur (ici tabulation) :

Sub Test()

    Dim MonFichier As String

    MonFichier = "MonFichier.txt"

    'les fichiers dans le même dossier que le classeur
    Lire ThisWorkbook.Path & "\" & MonFichier, vbTab

End Sub

ok merci mais pour fusionner comment je fait ?

Bonjour,

Voici un code un peu plus complet. 3 conditions cependant ;

1 le classeur "résultat.xls" doit exister et être ouvert

2 ce dernier doit déjà avoir les deux feuilles "TDM_09/2016" et "TM_09/2016"

3 les fichiers à importer doivent être dans le même dossier que le classeur où sera exécuter cette macro (qui peut d'ailleurs être mise dans le classeur"résultat.xls" ce qui serait assez cohérent) :

Sub Test()

    Dim TblFichier(1 To 3, 1 To 6)
    Dim Fe As String
    Dim I As Integer

    Fe = "TDM_09/2016"

    'premier groupe de fichier pour la feuille "TDM_09/2016"
    TblFichier(1, 1) = "FIC1.cvs" 'nom du premier fichier
    TblFichier(2, 1) = ";" 'séparateur du premier fichier
    TblFichier(3, 1) = 14 'Index colonne N

    TblFichier(1, 2) = "FIC2B.txt" 'nom du second fichier
    TblFichier(2, 2) = vbTab 'séparateur du second fichier
    TblFichier(3, 2) = 9 'Index colonne N

    TblFichier(1, 3) = "FICA.txt" 'nom du troisième fichier
    TblFichier(2, 3) = ";" 'séparateur du troisième fichier
    TblFichier(3, 3) = 14 'Index colonne N

    'second groupe de fichier pour la feuille "TM_09/2016"
    TblFichier(1, 4) = "FIC2.cvs" 'nom du quatrième fichier
    TblFichier(2, 4) = ";" 'séparateur du quatrième fichier
    TblFichier(3, 4) = 28 'Index colonne AB

    TblFichier(1, 5) = "FIC1A.txt" 'nom du cinquième fichier
    TblFichier(2, 5) = vbTab 'séparateur du cinquième fichier
    TblFichier(3, 5) = 13 'Index colonne M

    TblFichier(1, 6) = "FICB.txt" 'nom du sixième fichier
    TblFichier(2, 6) = ";" 'séparateur du sixième fichier
    TblFichier(2, 6) = 28 'Index colonne AB

    For I = 1 To UBound(TblFichier, 2)

        If I > 3 Then Fe = "TM_09/2016"

        'les fichiers dans le même dossier que le classeur
        Lire ThisWorkbook.Path & "\" & TblFichier(1, I), TblFichier(2, I), TblFichier(3, I), Fe

    Next I

End Sub

Sub Lire(Fichier As String, Separateur As String, Max As Integer, NomFeuille As String)

    Dim Ligne As String
    Dim I As Long
    Dim J As Long

    'recherche la dernière ligne non vide sur colonne A de la feuille du classeur résultat
    'ce dernier doit être ouvert
   J = Workbooks("résultat.xls").Worksheets(NomFeuille).Cells(Rows.Count, 1).End(xlUp).Row

    'ouvre le fichier en lecture
   Open Fichier For Input As #1

        'parcours toutes le lignes du fichier
       Do While Not EOF(1)

            'récupère chaque ligne
           Line Input #1, Ligne

            If Ligne <> "" Then

                J = J + 1

                'inscrit ces valeurs dans la feuille ligne par ligne dans chaque colonne
               For I = 0 To Max - 1

                   Workbooks("résultat.xls").Worksheets(NomFeuille).Cells(J, I + 1) = Split(Ligne, Separateur)(I)

                Next I

            End If

        Loop

    Close #1

    Erase Tbl

End Sub

j'ai un "type argument byref incompatible"

sur 'les fichiers dans le même dossier que le classeur

Lire ThisWorkbook.Path & "\" & TblFichier(1, I), TblFichier(2, I), TblFichier(3, I), Fe

Bonjour,

N'ayant absolument pas fais de test, ce détail m'a échappé

Ceci viens du fait que dans VB les arguments sont passés par référence (emplacement mémoire) et comme mon tableau n'est pas explicitement typé (choix que j'ai fais car présence de l'index de colonne qui est un entier) ce n'est pas accepté. Il y a bien sûr plusieurs solutions, soit typé le tableau afin qu'il corresponde au type des arguments donc tout passer en String (tableau et arguments) avec conversion de l'argument "Max" en type Integer (entier) :

For I = 0 To CInt(Max) - 1

soit passer les arguments par valeur et non par référence (un nouvel emplacement mémoire est créé pour chaque argument) avec le mot clé ByVal ce que je viens de faire avec le nouveau code ci-dessous. Seul l'argument "NomFeuille" n'est pas par valeur car le type est identique ("Fe" et "NomFeuille" --> String) mais il pourrait être aussi passé par valeur. Le code n'ayant toujours pas été testé (je n'ai créé aucun fichier bidon pour ça !) il pourrait y avoir encore un ou deux bugs, tiens moi au courant :

Sub Test()

    Dim TblFichier(1 To 3, 1 To 6)
    Dim Fe As String
    Dim I As Integer

    Fe = "TDM_09/2016"

    'premier groupe de fichier pour la feuille "TDM_09/2016"
   TblFichier(1, 1) = "FIC1.cvs" 'nom du premier fichier
   TblFichier(2, 1) = ";" 'séparateur du premier fichier
   TblFichier(3, 1) = 14 'Index colonne N

    TblFichier(1, 2) = "FIC2B.txt" 'nom du second fichier
   TblFichier(2, 2) = vbTab 'séparateur du second fichier
   TblFichier(3, 2) = 9 'Index colonne N

    TblFichier(1, 3) = "FICA.txt" 'nom du troisième fichier
   TblFichier(2, 3) = ";" 'séparateur du troisième fichier
   TblFichier(3, 3) = 14 'Index colonne N

    'second groupe de fichier pour la feuille "TM_09/2016"
   TblFichier(1, 4) = "FIC2.cvs" 'nom du quatrième fichier
   TblFichier(2, 4) = ";" 'séparateur du quatrième fichier
   TblFichier(3, 4) = 28 'Index colonne AB

    TblFichier(1, 5) = "FIC1A.txt" 'nom du cinquième fichier
   TblFichier(2, 5) = vbTab 'séparateur du cinquième fichier
   TblFichier(3, 5) = 13 'Index colonne M

    TblFichier(1, 6) = "FICB.txt" 'nom du sixième fichier
   TblFichier(2, 6) = ";" 'séparateur du sixième fichier
   TblFichier(2, 6) = 28 'Index colonne AB

    For I = 1 To UBound(TblFichier, 2)

        If I > 3 Then Fe = "TM_09/2016"

        'les fichiers dans le même dossier que le classeur
       Lire ThisWorkbook.Path & "\" & TblFichier(1, I), TblFichier(2, I), TblFichier(3, I), Fe

    Next I

End Sub

Sub Lire(ByVal Fichier As String, ByVal Separateur As String, ByVal Max As Integer, NomFeuille As String)

    Dim Ligne As String
    Dim I As Long
    Dim J As Long

    'recherche la dernière ligne non vide sur colonne A de la feuille du classeur résultat
   'ce dernier doit être ouvert
  J = Workbooks("résultat.xls").Worksheets(NomFeuille).Cells(Rows.Count, 1).End(xlUp).Row

    'ouvre le fichier en lecture
  Open Fichier For Input As #1

        'parcours toutes le lignes du fichier
      Do While Not EOF(1)

            'récupère chaque ligne
          Line Input #1, Ligne

            If Ligne <> "" Then

                J = J + 1

                'inscrit ces valeurs dans la feuille ligne par ligne dans chaque colonne
              For I = 0 To Max - 1

                   Workbooks("résultat.xls").Worksheets(NomFeuille).Cells(J, I + 1) = Split(Ligne, Separateur)(I)

                Next I

            End If

        Loop

    Close #1

End Sub

désolé theze mais c'est mon fils qui a voulu m'aider en postant autant de fois la demande sur autant de forum

je m'excuse si cette démarche a pu te contrarier elle n'étais pas intentionnel

j'ai tester le dernier code j'ai un message sur

J = Workbooks("résultat.xlsm").Worksheets(NomFeuille).Cells(Rows.Count, 1).End(xlUp).Row

"l'indice n'appartient pas a la sélection "

Bonjour,

Ceci viens du fait que le nom de la feuille ou du classeur est mal orthographié ! Vérifie que les noms soient bons.

La règle des forums est qu'on ne fait pas de multi-postage par respect pour ceux qui répondent et c'est seulement si la discussion n'aboutie pas au resultat escompté que tu vas poster ailleurs.

Je ne serait pas devant mon pc pour les 4 jours qui viennent !

Rechercher des sujets similaires à "importer fusionner fichier csv txt"