Je souhaite stocker des données dans une feuille de calcul à partir de plusieurs fichiers .txt. De plus, je veux que la première cellule contienne le nom du fichier et pas le chemin du fichier (si possible) afin que je puisse le lier plus tard aux graphiques. Il y a aussi AT MOST 7 colonnes dans les données alors que le nombre de lignes est variable et chaque tableau supplémentaire est séparé par une colonne vide.Importer un fichier texte multiple Excel VBA
Dim myFile As String
Dim myValue As Integer
Dim rData As Integer
Dim Data As String
Dim LineArray() As String
Dim DataArray() As String
Dim TempArray() As String
Dim Delimiter As String
Dim row As Integer
Dim counter As Integer
Dim counterArrSep As Integer
Dim FileName As String
Sub Button1_Click()
'Input number of blades
myValue = InputBox("Please enter the number of employees below", "number of employees", vbOKCancel)
'Cancel (doesn't work properly)
If myValue = 0 Then
Exit Sub
End If
'Inputs
Delimiter = " "
row = 1
'Populate the table
Do While counter < myValue
'.txt file processing
'Show open file dialog box
myFile = Application.GetOpenFilename()
'Cancel
If myFile = "False" Then
Exit Sub
End If
'Get file name (doesn't work)
FileName = Dir(myFile, vbDirectory)
Dim DataArray()
DataArray(counterArrSep, 0) = FileName
'Open file
rData = FreeFile
Open myFile For Input As rData
'Store file content inside a variable
Data = Input(LOF(rData), rData)
'Close file
Close rData
'Separate Out lines of data
LineArray() = Split(Data, vbCrLf)
'Read Data into an Array Variable
For x = LBound(LineArray) To UBound(LineArray)
If Len(Trim(LineArray(x))) <> 0 Then
'Split up line of text by delimiter
TempArray = Split(LineArray(x), Delimiter)
'Determine how many columns are needed
col = UBound(TempArray)
'Re-Adjust Array boundaries
ReDim Preserve DataArray(col, row)
'Load line of data into Array variable
For y = LBound(TempArray) To UBound(TempArray)
DataArray(y + counterArrSep, row) = TempArray(y)
Next y
End If
'Next line
row = row + 1
Next x
'Clear array
Erase TempArray
'Increments the count to get another file
counter = counter + 1
'Adds space between each arrays in the Worksheet
counterArrSep = counterArrSep + 8
Loop
End Sub
Les fichiers txt ressemble à ceci: ... \ employés \ John.txt
apples pears oranges carrots
4 5 34 2
43 5,5 4 43
6 54 9 7,5
41,5 55 0 2
...\employees\Steve.txt
apples pears oranges carrots cabbages
6 56 6 2 0
4 1 4 12 5
0 7 9 7 6
0 12 1 5 3
1 44 3 6 0
4 4 4,5 6 23
alors quel est exactement le problème? Vous devriez diviser votre code en plusieurs procédures. Faire un qui obtient tous les fichiers dans votre dossier sélectionné. Ensuite, faites en un autre pour importer un fichier à la fois et appelez cette deuxième procédure à partir du premier en passant le nom de fichier en paramètre. En ce moment je suppose que vous avez des problèmes pour parcourir les fichiers, n'est-ce pas? – cboden
BTW: vous devriez vraiment mieux structurer votre code. Cela n'a pas de sens de déclarer toutes les variables pour le module entier en dehors d'une procédure par exemple. Divisez votre problème en problèmes plus petits et résolvez-les un par un. Actuellement, vous êtes vraiment loin de la solution et vous avez beaucoup de problèmes. Structure vous projetez et revenez lorsque vous avez identifié un problème unique. – cboden
Désolé fait VBA il y a des années. J'ai essayé de mettre en place ce dont je me souviens. –