Import données txt dans Excel avec nombre de colonnes variables
Bonjour a tous,
J'essaye de developper une macro pour extraire des données de fichiers .txt dans un feuille de classeur excel. Mon but est de faire un copier coller identique entre le txt et excel.
Grâce a la vidéo de "Tuto de Rien - Excel VBA : Importer des données depuis un fichiers CSV et TXT" j'ai pu adapter son exemple.
La longeur maximale dans mon fichier est de 23 cellules/données et lorsque j'essaie le code adapté avec un fichier test comportant a chaque ligne les 23 cellules/données, le code fonctionne très bien.
Malheureusement mon fichier txt qui est généré par l'équipement que j'utilise est étrangement fichu et certaines lignes ont moins de 23 entrées. Lorsque la macro arrive sur ces lignes il plante.
J'ai mis en pièce jointe un exemple de fichier qui est généré. Au cas ou, ici le fichier contient les entrées de données pour 4 plaques mais il peut être plus long et aller jusqu'à 10.
Merci de votre aide,
HB
Sub ImportCSV()
Dim dialogBox As FileDialog
Dim Selectedfile As String
Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)
With dialogBox
.Filters.Add "TXT", "*.txt", 1
.AllowMultiSelect = False
If .Show = True Then
Selectedfile = .SelectedItems(1)
End If
Debug.Print Selectedfile
End With
If Selectedfile <> "" Then
Open Selectedfile For Input As #1
Dim rowNumber As Long
Dim lineFromfile As String
Dim lineItems As Variant
Dim iteration As Integer
rowNumber = 1
Do Until EOF(1)
Line Input #1, lineFromfile
lineItems = Split(lineFromfile, vbTab)
For iteration = 0 To 22
Cells(rowNumber, iteration + 1) = lineItems(iteration)
Next
rowNumber = rowNumber + 1
Loop
Close #1
End If
End SubBonjour,
Je pense qu'il suffit d'adapter la longueur de la boucle for au nombre d'élément par ligne :
Sub ImportCSV()
Dim dialogBox As FileDialog
Dim Selectedfile As String
Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)
With dialogBox
.Filters.Add "TXT", "*.txt", 1
.AllowMultiSelect = False
If .Show = True Then
Selectedfile = .SelectedItems(1)
End If
Debug.Print Selectedfile
End With
If Selectedfile <> "" Then
Open Selectedfile For Input As #1
Dim rowNumber As Long
Dim lineFromfile As String
Dim lineItems As Variant
Dim iteration As Integer
rowNumber = 1
Do Until EOF(1)
Line Input #1, lineFromfile
lineItems = Split(lineFromfile, vbTab)
For iteration = 0 To UBound(lineItems)
Cells(rowNumber, iteration + 1) = lineItems(iteration)
Next
rowNumber = rowNumber + 1
Loop
Close #1
End If
End Subon est passé à For iteration = 0 To UBound(lineItems).
Cordialement,
Super !!!
Un grand merci et bonne journée !
HB