Imports de fichiers CSV -> Mise en forme de ceux-ci avec VBA

Bonjour à tous,

je viens vers vous pour m'aider à developper une macro.

Actuellement celle-ci me permet d'importer plusieurs fichier CSV en meme temps et les classer dans un onglet excel. Le but c'est de grouper les data pour plus facilement les analyser.

Le "probleme" que je rencontre regulierement c'est que j'aimerais avec cette meme macro au delà d'importer les donnees brut de retravailler leur mise en forme pour faciliter la creation de graphes par la suite.

Aujourd'hui lorsque j'importe/exporte des fichiers comme le fichier en PJ "example" avec ma macro ( Data excel pratique ) que voici :

Option Explicit

Sub ImportFichiers()
  On Error GoTo TestErreur
  Dim sh As Worksheet
  Dim import As Variant
  Dim dossierRacine As String
  Dim n As Integer
  Dim fichier$
  Dim DossierParent$

  dossierRacine = ThisWorkbook.Path
  Set sh = Sheets("Import fichiers")
  sh.Cells.Clear

  With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = dossierRacine: .AllowMultiSelect = True: .Show
    For n = 1 To .SelectedItems.Count
      fichier = .SelectedItems(n)
      DossierParent = TrouveDossierParent(fichier)
      sh.Cells(1, 1) = DossierParent
      sh.Cells(2, n) = Right(fichier, Len(fichier) - InStrRev(fichier, "\"))
      import = LireFichierTexte(fichier) 'appelle la fonction "LireFichierTexte"
      import = Split(import, Chr(10))
      sh.Cells(3, n).Resize(UBound(import) + 1) = Application.Transpose(import)
    Next n
  End With

  Exit Sub
TestErreur:
    MsgBox "Le fichier n'a pas pu être lu..."

End Sub

Sub ExportFichiers()
  Dim nbCol As Long, nbLi As Long
  Dim f As Integer
  Dim rng As Range, ligne As Range
  Dim i As Integer
  Dim dossierRacine As String
  Dim nomFichier As String

  With Sheets("Import fichiers")
    dossierRacine = .Cells(1, 1).Value
    nbCol = .Cells(2, .Columns.Count).End(xlToLeft).Column
    For i = 1 To nbCol
      nomFichier = dossierRacine & .Cells(2, i).Value2
      nbLi = .Cells(Rows.Count, i).End(xlUp).Row - 1
      Set rng = .Range(.Cells(3, i), .Cells(nbLi, i))
      f = FreeFile
      Open nomFichier For Output As #f
      For Each ligne In rng
        ligne.Value2 = Replace(ligne.Value2, Chr(13), "")
        Print #f, ligne.Value
      Next
      Close f
    Next i
  End With

End Sub

Public Function LireFichierTexte(ByVal MonFichier As String) As String
    On Error GoTo LireFichierTexteErreur
    Dim IndexFichier As Integer
    IndexFichier = FreeFile()
    Open MonFichier For Binary Access Read As #IndexFichier
    LireFichierTexte = Space$(LOF(IndexFichier))
    Get #IndexFichier, , LireFichierTexte
    Close #IndexFichier

    Exit Function
LireFichierTexteErreur:
    Close #IndexFichier
    LireFichierTexte = ""
End Function

Function TrouveDossierParent(sPath As String)
  ' Vérifier la construction du chemin
  If Right(sPath, 1) = "\" Then sPath = Left(sPath, Len(sPath) - 1)
  ' Dossier parent = chemin avant le dernier slash
  TrouveDossierParent = Left(sPath, InStrRev(sPath, "\"))
End Function

Mes datas sont sous la forme ( exemple pour deux fichiers ):

Tag;RH_C1_THE.F_CVTag;RH_C2_THE.F_CV
12:00:00 AM;44312:00:40 AM;442
12:00:02 AM;44212:00:46 AM;443
12:00:04 AM;44012:00:48 AM;442
12:00:08 AM;44112:00:50 AM;443
12:00:12 AM;44212:00:56 AM;442
12:00:14 AM;44112:00:58 AM;441
12:00:26 AM;44212:01:28 AM;442

et je souhaiterais qu'elles soient sous cette forme

videTag;RH_C1_THE.F_CVvideTag;RH_C2_THE.F_CV
12:00:00 AM44312:00:40 AM442
12:00:02 AM44212:00:46 AM443
12:00:04 AM44012:00:48 AM442
12:00:08 AM44112:00:50 AM443
12:00:12 AM44212:00:56 AM442
12:00:14 AM44112:00:58 AM441
12:00:26 AM44212:01:28 AM442
22example.zip (49.96 Ko)

Apres plusieurs essais et enregistrement de macro j'ai du éal a sequencer l'ensemble pour aue ce soit repetable en fonction d'un noébre de fichier a analyser variable.

Bonne journee

Hello,

Pour moi ce serait plus simple de faire un dossier dans lequel tu mets tous les csv.

Puis via PowerQuery récupérer toutes les datas et les transformer à ta guise.

Quelques minutes pour le mettre en place.

@+

Un exemple a me faire suivre ou un tuto ? je ne maitrise pas specialement powezr query mais pourquoi pas :)

Up

Hello,

Une proposition

Je t'ai fait une petite requête sur la base du format de ton fichier csv "example".

Ce que j'ai fait c'est que je l'ai dupliqué et j'ai changé le nom de la colonne où j'avais "C1" j'ai mis "C2" pour changer le nom de la colonne.

Donc comment ça marche :

Il faut te créer un dossier dans lequel tu vas mettre tes csv example et example-2 ;

Une fois que c'est fait tu ouvres le fichier qui contient la requête et il y a une cellule ou tu dois rentrer le chemin de ton dossier dans lequel se trouvent tes fichiers example ;

Une fois que c'est fait tu as juste à faire clic droit puis actualiser sur le tcd pour mettre à jour tes données ;

Ca te donne une seule colonne qui contient tes tag et le reste des colonnes C1, C2 ... Cxxx, se mettront à jour automatiquement

Si jamais tu rencontres un message d'erreur, il faudra suivre ces étapes :

Aller dans Données, Obtenir des données, lancer l'éditeur PowerQuery, Fichier, Options et paramètres, Options de requêtes, Puis rubrique "Chargement de données" cocher l'option "Ne jamais autoriser le téléchargement des aperçus de données en arrière plan" puis rubrique "confidentialité", cocher "Toujours ignorer les paramètres de niveau de confidentialité"

N'hésite pas si besoin

@+

13example.zip (49.96 Ko)
9example-2.zip (49.96 Ko)

Merci pour ton retour.

J'aime la maniere dont cela fonctionne en revanche je ne l'ai pas mentionné mais il faut que je puisse exploiter ces datas de maniere a pouvoir comparer plusieurs chacun de ces fichiers sur plusieurs periode de temps ajustable a ma guise.

Exemple ci-dessous d'un fichier comme celui que j'ai envoyé ou j'analyse deux periodes ( du (20231004 de 16h30 a 17h30 ) au (20231004 de 21h00 a 22h00 ) :

image

A l'heure actuelle les donnees sont ordonnees comme cela ( exemple avec 4 fichiers ouverts ) :

image

Sais-tu comment faire pour en fonction de la colonne choisi afficher les datas sur une ou plusieurs periodes de temps ?

Cordialement

Hello,

Ou sont contenus les datas qui indiquent le jour et l'heure d'extraction de ce que j'en comprends ?

@+

L'heure c'est la premiere colonne et le jour c'est le nom de mon fichier mais pas necessaire de l'afficher =)

Dans ce cas là si jamais tu peux envoyer un fichier csv avec la bonne syntaxe de nom etc on peut reconstituer une date complète.

Ensuite à voir ce qu’on peut en faire donc si jamais tu peux transmettre deux fichiers csv avec les bons noms et le contrôle que tu veux faire ce serait top

@+

Ok, alors par exemple :

15rh-c1-the-f-cv.zip (49.97 Ko)
9rh-c2-the-f-cv.zip (58.12 Ko)

Ces deux fichiers dates du 6/10/2023.

Ce que je souhaite c'est afficher deux periodes :

16h30 à 17h30 et 21h00 à 22h00 en fonction des donnees de temperatures 440 et quelques ... avec le fichier C1

16h30 à 17h30 et 21h00 à 22h00 en fonction des donnees de temperatures 440 et quelques ... avec le fichier C2

Hum, je ne comprends pas, dans le nom de ton fichier tu n'as pas la date ...

Oui lorsque je fais des exports, je sais la date de ceux-ci mais sinon elle n'est pas mentionnee particulierement.

Conserve ces deux fichiers alors et renomme les par :

rh-c1-the-f-cv_6102023.zip

rh-c2-the-f-cv_6102023.zip

Est-ce que tout est clair ? ou as-tu besoin d'autres informations ?

Est-ce que tout est clair ? ou as-tu besoin d'autres informations ?

UP

Rechercher des sujets similaires à "imports fichiers csv mise forme ceux vba"