Concaténation de fichiers csv pour opérations
Bonjour à tous !
Je dois faire un petit outils au boulot qui va manipuler pas mal de données. Je préfère utiliser R habituellement mais mes collaborateurs préfèrent que j'utilise vba car ils ont peur de se trouver dans la panade quand je partirais, ce que je peux comprendre
Le problème auquel je m'oppose est le suivant:
Pour l'outils J'aurais un certain nombre de fichiers csv (5 à 30), dans un même dossier et tous organisé de la même façon,
- Colonne "Date de la mesure"
- Colonne "Heure de la mesure"
- Colonne "Valeur"
Il y a d'autre truc mais je n'en ai pas besoin
Ce que j'aimerais c'est récupérer les trois colonnes du premier fichier pour le mettre dans un onglet "TOP 10" de mon outil, mettre en colonne 4 la colonne "Valeur" du fichier 2, en colonne 5 la colonne "Valeur" du fichier 3, et etc...
J'ai essayé des choses avec une fonction que j'ai trouvée sur le net
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Function SelectionRep() As String
Const ssfTous = &H1
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", ssfTous)
If objFolder Is Nothing Then Exit Function
Set oFolderItem = objFolder.Items.Item
SelectionRep = oFolderItem.Path
Set objShell = Nothing
Set objFolder = Nothing
Set oFolderItem = Nothing
End Function |
Je balai ensuite l'ensemble du dossier pour extraire les données de mes fichiers
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
Option Explicit
Dim Lig As Long
Dim Chemin As String
Sub ExtractionCSV()
Dim Fichier
Lig = 2
Chemin = SelectionRep() & "\"
Fichier = Dir(Chemin)
Do While Fichier <> ""
Lig = Lig + 1
CopierData Fichier
Fichier = Dir
Loop
Sheets(2).Cells.ClearContents
Sheets(1).Select
End Sub |
J'ai ensuite essayer de prendre un bout de code que je n'ai pas fait et que je n'arrive pas à adapter à mon cas.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
Sub CopierData(Fichier)
With Sheets(1)
.Cells.ClearContents
With .QueryTables.Add(Connection:="TEXT;" & Chemin & Fichier, Destination _
:=.Range("A1"))
.Name = Fichier
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = """"
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
.Range("L1:L6").Copy
Sheets("TOP10").Cells(Lig, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End With
End Sub |
Ca n'extrait que le premier fichier csv et en plus j'ai l'ensemble du fichier sur une seule et même colonne !
Tout élément de réponse à mon problème serait d'une aide précieuse
En espérant avoir été clair et en attendant de vous lire,
Je vous souhaites une agréable fin de semaine