XL pour MAC Fusionner automatiquement des lignes dans un fichier .csv

toto2011

XLDnaute Nouveau
Bonjour à tous,
j'ai besoin d'aide sur un relevé bancaire pro de la banque Société Générale en format .CSV
C'est l'unique format CSV disponible sur ce compte bancaire.
En effet, le csv est refusé en importation dans Quickbooks car la 2eme colonne "intitulé" s'étale sur plusieurs différentes lignes. Donc le logiciel ne détecte pas de date à gauche et de montant à droite en considérant que ce sont plusieurs opérations (alors que ça n'en est qu'une) (cf image jointe)
Comment convertir automatiquement (car milliers d'opération) ce .csv afin que chaque intitulé ne soit que sur une ligne et donc importable dans Quickbooks ?
Cela pourrait passer par une automatisation qui consisterait à fusionner dans la 2eme colonne (intitulé) avec la cellule supérieur dans le cas où la case de gauche (date) est vide.
Ce serait encore mieux si cela ne faisait pas que fusionner mais mettait le tout sur la même ligne avec un espace entre chaque.
Merci
 

Pièces jointes

  • Test.jpg
    Test.jpg
    121.5 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonjour toto2011, le forum,

Téléchargez les fichiers zippés joints dans le même dossier.

Ouvrez les fichiers CSV, regardez-les bien et refermez-les.

Ouvrez le fichier .xlsm et exécutez la macro du bouton :
VB:
Sub Fusionner_CSV()
Dim sep$, chemin$, fichier$, n&, i&, a$(), x, texte$, s, ss
sep = ";"
chemin = ThisWorkbook.Path & Application.PathSeparator
fichier = Dir(chemin) 'ne pas utiliser de caractère générique sur MAC
While fichier <> ""
    If LCase(Right(fichier, 4)) = ".csv" Then
        n = n + 1
        i = 0
        Erase a
        x = FreeFile
        Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle
        Do While Not EOF(1) 'EndOfFile: fin du fichier
            Line Input #x, texte   'récupère la ligne
            s = Split(texte, sep)
            If s(0) = "" Then
                ss(1) = ss(1) & " " & s(1) 'concaténation
                a(i - 1) = Join(ss, sep) 'concaténation
            Else
                ss = s
                ReDim Preserve a(i)
                a(i) = texte
                i = i + 1
            End If
        Loop
        Close #x
        x = FreeFile
        Open chemin & fichier For Output As #x 'ouverture en écriture
        Print #x, Join(a, vbLf) 'concaténation avec renvoi à la ligne
        Close #x
    End If
    fichier = Dir
Wend
MsgBox n & " fichier(s) CSV traité(s)", , "Fusion"
End Sub
La macro est très rapide car les fichiers CSV sont traités en lecture séquentielle.

A+
 

Pièces jointes

  • Dossier.zip
    16 KB · Affichages: 2

toto2011

XLDnaute Nouveau
Bonjour toto2011, le forum,

Téléchargez les fichiers zippés joints dans le même dossier.

Ouvrez les fichiers CSV, regardez-les bien et refermez-les.

Ouvrez le fichier .xlsm et exécutez la macro du bouton :
VB:
Sub Fusionner_CSV()
Dim sep$, chemin$, fichier$, n&, i&, a$(), x, texte$, s, ss
sep = ";"
chemin = ThisWorkbook.Path & Application.PathSeparator
fichier = Dir(chemin) 'ne pas utiliser de caractère générique sur MAC
While fichier <> ""
    If LCase(Right(fichier, 4)) = ".csv" Then
        n = n + 1
        i = 0
        Erase a
        x = FreeFile
        Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle
        Do While Not EOF(1) 'EndOfFile: fin du fichier
            Line Input #x, texte   'récupère la ligne
            s = Split(texte, sep)
            If s(0) = "" Then
                ss(1) = ss(1) & " " & s(1) 'concaténation
                a(i - 1) = Join(ss, sep) 'concaténation
            Else
                ss = s
                ReDim Preserve a(i)
                a(i) = texte
                i = i + 1
            End If
        Loop
        Close #x
        x = FreeFile
        Open chemin & fichier For Output As #x 'ouverture en écriture
        Print #x, Join(a, vbLf) 'concaténation avec renvoi à la ligne
        Close #x
    End If
    fichier = Dir
Wend
MsgBox n & " fichier(s) CSV traité(s)", , "Fusion"
End Sub
La macro est très rapide car les fichiers CSV sont traités en lecture séquentielle.

A+
Merci.
je suis débutant. Auriez vous la gentillesse de me détailler les étapes ?
Merci
 

toto2011

XLDnaute Nouveau
@job75
Quand vous dites ouvrez les fichiers .csv ce sont les 2 que vous avez joint ou les miens que je met à la place dans le même dossier ?
Puis dois je juste appuyer sur le bouton "Fusionner les CSV" ou copier coller votre code et dans ce cas le mettre où ?
Merci pour votre compréhension
 

job75

XLDnaute Barbatruc
J'ai dit d'ouvrir les 2 fichiers CSV pour que vous voyez les tableaux puisqu'après ils sont modifiés.

Dans le fichier xlsm vous avez juste à cliquer sur le bouton pour que la macro s'exécute.

Pour voir le code allez dans VBA (touches Alt+F11) et double-cliquez sur Module1.
 
Haut Bas