Importer un fichier .txt sous forme de tableau
Bonjour à tous,
Actuellement en stage, je dois programmer une macro excel qui compare deux feuilles de calcul pour trouver si des lignes sont présentes dans les deux feuilles. Pour me faciliter la tâche, j'aimerais pouvoir importer mes deux fichiers .txt dans les feuilles de calcul sous forme de tableau.
Voici mon code actuel :
Private Sub CommandButton1_Click()
On Error Resume Next
Worksheets("Import1").Activate 'Active la feuille "Import1"
ButtonImport1.Visible = True 'Rend visible le bouton d'import
With Application.FileDialog(msoFileDialogOpen) 'Ouvre une fenêtre de type "Parcourir..."
AllowMultiSelect = False
.Title = "Sélectionnez un fichier .txt" 'avec pour titre "Sélectionnez un fichier .txt"
.Show
.Filters.Clear
.Filters.Add "Text File", "*.txt" 'Ajoute un filtre à la sélection de fichier (ici que des .txt)
.FilterIndex = 1
FormImport.TextBoxImport1.Text = .SelectedItems(1) 'Ecrit le nom du fichier sélectionné dans la textbox
If (.SelectedItems.Count = 0) Then
ButtonImport1.Visible = False
Else
ButtonImport1.Visible = True
End If
End With
End Sub
__________________________________________________________________________________________________________________________________________
Sub Extraction(Fichier As String, _
NbLignesParFeuille As Long, _
Separateur As Variant)
Dim Wb As Workbook
Dim Counter As Double
Dim Tableau() As String
Dim i As Integer
Dim ContenuLigne As String
Application.ScreenUpdating = False
Counter = 1
Open Fichier For Input As #1 'Ouverture du fichier .txt
Do While Not EOF(1)
If Counter > NbLignesParFeuille Then
Wb.Worksheets.Add
Counter = 1
End If
Line Input #1, ContenuLigne 'découpe la chaine en fonction des espaces " "
'le résultat de la fonction Split est stocké dans un tableau
Tableau = Split(ContenuLigne, Separateur)
For i = 0 To UBound(Tableau) 'boucle sur le tableau pour extraire les données
ActiveSheet.Cells(Counter, i + 1) = Tableau(i)
Next i
Counter = Counter + 1
Loop
Close #1
Application.ScreenUpdating = True
MsgBox "Opération effectuée avec succès.", vbInformation, "Import"
End Sub
__________________________________________________________________________________________________________________________________________
Private Sub ButtonImport1_Click()
On Error Resume Next
Extraction TextBoxImport1.Text, 300000, vbTab
End Sub
L'import est effectué sans erreur, mais tout le fichier texte est importé dans une seule colonne, ce qui me rend la tâche encore plus difficile pour comparer les deux feuilles, étant donné que cela prend plus ou moins 400 000 lignes.
Les fichiers textes à importer comportent des lignes de données de type varchar et number séparées par des ";". (exemple en PJ)
J'aimerais donc ranger dans une colonne chaque donnée délimitée par les ";".
Si je n'ai pas été très clair, n'hésitez pas à me le faire savoir et à me demander des précisions si nécessaire.
Merci d'avance
Voici une macro qui convertir un fichier texte ouvert dans Excel et occupant la seule colonne A (après avoir sélectionné cette colonne):
Sub Convertir()
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1)), _
TrailingMinusNumbers:=True
End Sub
Bonjour et merci de votre réponse,
Justement, mon problème c'est qu'avec mon code, le fichier texte s'importe seulement dans la colonne A, et j'aimerais qu'il s'importe dans 11 colonnes différentes afin qu'il soit plus lisible et prenne moins de place.
Cordialement
Si ton fichier texte a une extension .csv, Excel devrait l'interpréter en ouverture; Par contre s'il a l'extension .txt Excel l'ouvrira sur une seule colonne.
Mon idée était d'ouvrir le fichier .txt et dès l'ouverture de lancer la macro de conversion.
Merci, votre fonction de conversion fonctionne bien, mais j'ai quelques questions par rapport à celle-ci :
- Est-il possible de sélectionner toute la colonne A sans devoir le faire manuellement ? Car étant donné le nombre de données, cela prend du temps.
- Il y a plusieurs lignes vides entre chaque ligne de données, comment pourrais-je rectifier cela ?
- Serait-il possible de donner à titre à chaque colonne ?
En vous remerciant encore une fois pour votre aide précieuse
Pour les lignes vides, en début de macro
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Sélectionner toute la colonne A :
Columns("A:A").Selecto
en début de macr
Merci beaucoup à vous c'est parfaitement ce que je voulais !
Bonne continuation !
Cordialement.