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_CV | Tag;RH_C2_THE.F_CV |
| 12:00:00 AM;443 | 12:00:40 AM;442 |
| 12:00:02 AM;442 | 12:00:46 AM;443 |
| 12:00:04 AM;440 | 12:00:48 AM;442 |
| 12:00:08 AM;441 | 12:00:50 AM;443 |
| 12:00:12 AM;442 | 12:00:56 AM;442 |
| 12:00:14 AM;441 | 12:00:58 AM;441 |
| 12:00:26 AM;442 | 12:01:28 AM;442 |
et je souhaiterais qu'elles soient sous cette forme
| vide | Tag;RH_C1_THE.F_CV | vide | Tag;RH_C2_THE.F_CV |
| 12:00:00 AM | 443 | 12:00:40 AM | 442 |
| 12:00:02 AM | 442 | 12:00:46 AM | 443 |
| 12:00:04 AM | 440 | 12:00:48 AM | 442 |
| 12:00:08 AM | 441 | 12:00:50 AM | 443 |
| 12:00:12 AM | 442 | 12:00:56 AM | 442 |
| 12:00:14 AM | 441 | 12:00:58 AM | 441 |
| 12:00:26 AM | 442 | 12:01:28 AM | 442 |
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