Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Intégrer automatiquement chaque fichier CSV dans chaque onglet excel?

  • Initiateur de la discussion Initiateur de la discussion bobo59
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

bobo59

Guest
Chaque matin, je reçois une quinzaine de fichiers CSV (un fichier par filiale) que je voudrai intégrer automatiquement dans un fichier excel unique (chaque fichier CSV = 1 onglet du fichier Excel)
Les paramètres des fichiers CSV que je reçois : exemple pour la filiale GB du 28 juillet 2011
- Nom du fichier csv = 1_Ventes_GB_2011-07-28.csv
- Nom de la feuille = 1_Ventes_GB_2011-07-28
Quelqu’un peut m’aider à éviter le copier/coller ?

edit : je suis très à l'aise en Excel, mais pas du tout en vba
 
Re : Intégrer automatiquement chaque fichier CSV dans chaque onglet excel?

je suis parti de cette macro => https://www.excel-downloads.com/threads/importer-un-csv-avec-une-macro.51528/
elle permet d'intégrer un fichier CSV dans la feuil2 du classeur
ca marche très bien

Sub ouvre_csv()
nom_classeur_ouvert = ActiveWorkbook.Name
jour = Format(Day(Date - 1), "##00")
mois = Format(Month(Date), "##00")
annee = Format(Year(Date), "####0000")
nom_classeur_a_ouvrir = "1_Ventes__" & annee & "-" & mois & "-" & jour & ".csv"
With Application
Set fich = .Workbooks.Open("C:\TEMP\test\Ventes\GROUPE\" & nom_classeur_a_ouvrir)
fich.Sheets(1).Columns(1).TextToColumns Range("A1"), xlTextQualifierDoubleQuote, , False, , , , , True, ";", Array(1, 4)
End With
Cells.Select
Selection.Copy
Windows(nom_classeur_ouvert).Activate
Sheets("Feuil2").Select
ActiveSheet.Paste
Range("A1").Select
Sheets("Feuil1").Select
Windows(nom_classeur_a_ouvrir).Activate
Range("A1").Select
Application.CutCopyMode = False
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
MsgBox "Vos données du fichier " & nom_classeur_a_ouvrir & " sont copiées sur la feuille 2 de votre classeur", vbInformation + vbOKOnly, "Importation de données CSV"
End Sub

idéalement, je voudrai que tous les fichiers "1_Ventes__2011-xx-xx.csv" du répertoire "C:\TEMP\test\Ventes\GROUPE\" s'intègre dans cette feuil2, avec un colonne vide entre chaque intégration
pour le moment, ca me donne comme résultat le fichier "1_Ventes__2011-11-09.csv" est bien intégré dans les colonnes A à G de la feuil2
l'objectif est que ca intègre automatiquement le fichier "1_Ventes__2011-11-08.csv" dans les colonne I à O, puis "1_Ventes__2011-11-07.csv" dans les colonne Q à W.... etc...

comment faire?
 
Re : Intégrer automatiquement chaque fichier CSV dans chaque onglet excel?

Bonjour bobo59, Salut Pierrot 🙂,
Pas très clair tout ça 🙄...
Sur le début du fil on peux dire
Que tu devrais suivre les conseils avisés de Pierrot
Que deux posts en un mois prouvent que tu as de la suite dans les idées
Qu'avec deux posts en un mois le projet va être long
Qu'en un mois tu as changé d'idée
En dehors de ça le reste est flou.
Pour ta première demande essai cela :
VB:
Sub test()
Dim dossier As Object, fichier As Object, Tmp As Variant
Dim Rep$, Fin$, ChaineData$
With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
Rep = "C:\TEMP\test\Ventes\GROUPE\"
Fin = Format(Date, "yyyy-mm-dd") & ".csv"
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Rep)
Workbooks.Add (1)
With ActiveWorkbook
    For Each fichier In dossier.Files
        If Right(fichier.Name, 14) = Fin Then
            .Sheets.Add(After:=Sheets(Sheets.Count)).Name = _
            Left(fichier.Name, Len(fichier.Name) - 4)
            Open fichier For Input As #1
                Do Until EOF(1)
                    Line Input #1, ChaineData
                    Tmp = Split(ChaineData, ";")
                    .Sheets(Sheets.Count).Cells(Rows.Count, 1).End(xlUp)(2). _
                    Resize(1, UBound(Tmp)) = Tmp
                Loop
            Close #1
        End If
    Next fichier
    If .Sheets.Count > 1 Then .Sheets(1).Delete
End With
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
End Sub

Pour la seconde demande essai ceci :

VB:
Sub test_2()
Dim dossier As Object, fichier As Object, Tmp As Variant
Dim Rep$, Fin$, ChaineData$, LstCol&
With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
Rep = "C:\TEMP\test\Ventes\GROUPE\"
Fin = Format(Date, "yyyy-mm-dd") & ".csv"
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Rep)
Workbooks.Add (1)
With ActiveWorkbook.ActiveSheet
    For Each fichier In dossier.Files
        If Right(fichier.Name, 14) = Fin Then
            LstCol = .Cells(2, Columns.Count).End(xlToLeft).Column + 2
            If LstCol = 3 Then LstCol = 1
            Open fichier For Input As #1
                Do Until EOF(1)
                    Line Input #1, ChaineData
                    Tmp = Split(ChaineData, ";")
                    .Cells(Rows.Count, LstCol).End(xlUp)(2). _
                    Resize(1, UBound(Tmp)) = Tmp
                Loop
            Close #1
        End If
    Next fichier
End With
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
End Sub

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

D
  • Question Question
2
Réponses
28
Affichages
2 K
Deleted member 441486
D
P
  • Question Question
Réponses
14
Affichages
1 K
patrice3450
P
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…