Fussionner plusieurs .csv en un seul

  • Auteur de la discussion Aboutblank
  • Date de début

drul

Obscur pro du hardware
Staff
Reposte ton code actuel.

Pour le shell c'est étonnant en effet. çaa devrait marcher ... surement une question de droit ...
 

Aboutblank

Habitué
Code:
Sub FusionCSV()

    Dim i As Long
    
    Dim newCSVDesarchivage As Object
    
    Dim sourceWb As Workbook
    
    Dim destCell As Range
    
    Dim derLigne As Long
    
    Set newCSVDesarchivage = CreateObject("Excel.Sheet") 'Créé un objet pour fusionner tous les .csv
    
    'Set destCell = newCSVDesarchivage.Sheets(1).Range("A1") 'sélectionner la cellule de début
    
    Chemin = "S:\GS-PF\SecurisationDesarchivage\test\" 'Chemin ou se trouvent les fichiers CSV
    
    Fichier = Dir(Chemin & "*.csv") ' Premier fichier
    
    
    
    
    j = 1
    
    Do While Fichier <> ""
    
            Set sourceWb = Workbooks.Open(Chemin & Fichier)
            derLigne = sourceWb.Cells(Application.Rows.Count, "a").End(xlUp).Row
            
            For i = 1 To derLigne
    
                    sourceWb.Sheets(1).Range(sourceWb.Sheets(1).Cells(i, "A"), sourceWb.Sheets(1).Cells(i, "AE")).Copy newCSVDesarchivage.Sheets(1).Range(newCSVDesarchivage.Sheets(1).Cells(j, "A"), newCSVDesarchivage.Sheets(1).Cells(j, "AE"))
                    j = j + 1
            Next
            
            sourceWb.Close
            Fichier = Dir ' Fichier suivant
            
    
    Loop
        
    newCSVDesarchivage.SaveAs Filename:="S:\GS-PF\SecurisationDesarchivage\test\DemandedeDesarchivagedu.csv", FileFormat:=xlCSV, Local:=True
    
    Set newCSVDesarchivage = Nothing
    
    Set sourceWb = Nothing

 
End Sub
 

Aboutblank

Habitué
Pour le shell, j'en suis quasiment sur aussi, il me demande si je suis sur de vouloir le lancer, blablabla, quand je le lance manuellement. Sauf que excel, ne peut pas cliquer lui. ^^
 

drul

Obscur pro du hardware
Staff
derLigne = sourceWb.Sheets(1).Cells(Application.Rows.Count, "a").End(xlUp).Row

As-tu regarder le lien microsoft que je t'ai envoyé la méthode avec les "open" serait à mon avis la meilleures ici
 

Aboutblank

Habitué
Effectivement, tu as trouvé l'erreur. En 5 minutes, j'ai l'air fin... merci ^^

Par contre, ca me copy toute la ligne dans la première cellule à chaque fois.
Je vais voir comment je peux régler ça.

Et je vais relire la méthode dont tu parles avec le "open".
 

drul

Obscur pro du hardware
Staff
re-Salut, remplace:

Code:
Set sourceWb = Workbooks.Open(Chemin & Fichier)

par

Code:
Workbooks.OpenText Filename:=chemin & Fichier, local:=True
Set sourceWb = ActiveWorkbook
 

Aboutblank

Habitué
Oui, la méthode 1 à l'air plus propre et concise mais en soit elle revient au même. Du coups si je peux juste corriger mon programme ça sera toujours plus rapide que d'en réécrire un, non ?


Code:
sourceWb.Sheets(1).Range(sourceWb.Sheets(1).Cells(i, "A"), sourceWb.Sheets(1).Cells(i, "AE")).Copy newCSVDesarchivage.Sheets(1).Range(newCSVDesarchivage.Sheets(1).Cells(j, "A"), newCSVDesarchivage.Sheets(1).Cells(j, "AE"))
Suis-je fou ? Avec cette ligne de code, il est bien censé copier cellule par cellule, non ? Oo
Je ne vois pas comment, il en arrive à me copier toute la ligne du fichier source dans la premiere cellule de la ligne du fichier destination. oO
 

Aboutblank

Habitué
Oui, ça a résolue le problème. ^^ merci drull.
Par contre, je ne comprend pas pourquoi, ca a fonctionner. Les 2 lignes ( enfin la mienne et les 2 tiennes) m'ont l'air de faire la même chose. Non ?

 

drul

Obscur pro du hardware
Staff
Non ça dépend de la façon dont excel interprète un fichier texte (csv, ici, mais ça reste du texte). en utilisant opentext, tu peux lui spécifier le format de tes fichiers csv (ici avec local:=true).
Pour ta boucle, elle copie ligne par ligne (ce qui est particulièrement inefficace ici, et que l'on peut améliorer si tu le désires), pas cellule par cellule.
 

Aboutblank

Habitué
Vu que ça fonctionne comme ca, je vais pas t'ennuyer pour l'optimiser. Et dans l'idée le fait de copier ligne par ligne est plus sécurisé je trouve sachant que chaque ligne correspond à une demande.
D'ailleurs je ne comprend pas l'intérêt de copier cellule par cellule ? Il y a un gain de temps d'exécution ?
 

drul

Obscur pro du hardware
Staff
Non, faudrait tout copier d'un coup ! chaque copie prend du temps (à peu près le même que tu copies, une cellule ou 20000 ...), donc le moins d'opération de copie il y a, le mieux c'est.
Tu as tout pour bien faire...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 163
Messages
6 718 670
Membres
1 586 462
Dernier membre
jhonblack
Partager cette page
Haut