Importer plusieurs fichier .txt dans la même feuille
Bonjour à tous,
J'ai actuellement une fonction qui me permet d'importer un fichier .txt dans une feuille de calcul via une IHM, mais je peux en importer qu'un dans chaque feuille (si j'en importe il deuxième, il écrasera le premier). Voici mon code :
Fonction:
Public Sub Extraction(fichier As String, _
NbLignesParFeuille As Long)
Dim Counter As Double
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)
Line Input #1, ContenuLigne
ActiveSheet.Cells(Counter, 1) = ContenuLigne
Counter = Counter + 1
Loop
Close #1
Application.ScreenUpdating = True
MsgBox "Opération effectuée avec succès.", vbInformation, "Import"
End Sub
Bouton parcourir de mon ihm :
Private Sub CommandButton2_Click()
On Error Resume Next
RenommerFeuilles
Worksheets("Import1").Activate
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Title = "Sélectionnez un fichier texte"
.Show
.Filters.Clear
.Filters.Add "Text File", "*.txt"
.FilterIndex = 1
FormImport.TextBox1.Text = .SelectedItems(1)
If (.SelectedItems.count = 0) Then
ButtonImport.Visible = False
Else
ButtonImport.Visible = True
End If
End With
Bouton import de mon ihm :
Private Sub ButtonImport_Click()
Extraction.Extraction TextBox1.Text, 300000
End Sub
Je suis sûr que cela doit être faisable en même pas 3 lignes mais je ne vois vraiment pas...
Merci d'avance!
Bonjour
A tester
Public Sub Extraction(fichier As String, _
NbLignesParFeuille As Long)
Dim Counter As Double
Dim i As Integer
Dim ContenuLigne As String
Application.ScreenUpdating = False
Counter = Range("A" & Rows.Count).End(xlUp).row+1
Open fichier For Input As #1 'Ouverture du fichier .txt
Bonjour,
J'avais déjà essayé un truc dans le genre, mais ça ne marche pas. Avec ton code, rien du tout s'importe, les feuilles restent blanches.
En faisant comme ça :
Public Sub Extraction(Fichier As String, _
NbLignesParFeuille As Long)
Dim Counter As Double
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)
Line Input #1, ContenuLigne
ActiveSheet.Cells(Counter, 1) = ContenuLigne
Counter = Range("A" & Rows.count).End(xlUp).row + 1
Loop
Close #1
Application.ScreenUpdating = True
MsgBox "Opération effectuée avec succès.", vbInformation, "Import"
End Sub
Quand j'importe un deuxième fichier, Excel me demande si je veux écraser mes données, si je fais "annuler" ça les importe quand même mais après, impossible de les trier avec ma fonction.
J'ai essayé de faire une variable int pour faire "#int" au lieu de "#1#, en donnant +1 à l'int en fin de boucle, mais ça ne marche pas non plus.
Bonjour,
essaie ainsi
Fonction:
Public Sub Extraction(fichier As String, _
NbLignesParFeuille As Long)
Dim Counter As Double
Dim i As Integer
Dim ContenuLigne As String
Application.ScreenUpdating = False
Counter = cells(rows.count,1).end(xlup).row+1
Open fichier For Input As #1 'Ouverture du fichier .txt
Do While Not EOF(1)
Line Input #1, ContenuLigne
ActiveSheet.Cells(Counter, 1) = ContenuLigne
Counter = Counter + 1
Loop
Close #1
Application.ScreenUpdating = True
MsgBox "Opération effectuée avec succès.", vbInformation, "Import"
End Sub
Bouton parcourir de mon ihm :
Private Sub CommandButton2_Click()
On Error Resume Next
RenommerFeuilles
Worksheets("Import1").Activate
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Title = "Sélectionnez un fichier texte"
.Show
.Filters.Clear
.Filters.Add "Text File", "*.txt"
.FilterIndex = 1
FormImport.TextBox1.Text = .SelectedItems(1)
If (.SelectedItems.count = 0) Then
ButtonImport.Visible = False
Else
ButtonImport.Visible = True
End If
End With
Bouton import de mon ihm :
Private Sub ButtonImport_Click()
Extraction.Extraction TextBox1.Text, 300000
End Sub
Bonjour
Blodsvept a écrit :J'avais déjà essayé un truc dans le genre, mais ça ne marche pas. Avec ton code, rien du tout s'importe, les feuilles restent blanches.
Étonnant mais si tu le dis
A part l'initialisation de la variable Counter je n'ai rien fait d'autre
Donc avant tu n'importais rien non plus
Bonjour,
Même problème, excel me demande si je veux écraser mes données déjà existantes, si je dis non ça me les écrit quand même mais la fonction que j'appelle lorsque je clique sur le bouton d'import de mon IHM ne s'applique sur sur le premier fichier importé.
La fonction en question, si nécessaire :
Sub Convertir()
On Error Resume Next
Worksheets("Import1").Rows("1:500").RowHeight = 15 'Définit la hauteur des lignes de 1 à 500 =15
Columns("A:A").Select
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))
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'Supprime les lignes vides
Elle me permet de séparer une ligne de texte de type xx;xx;xx;xx;xx;xx;xx;xx;xx;xx par ses semicolons et les transférer dans les colonnes A à J, de supprimer les lignes vides et de redimensionner les rows.
EDIT : Banzai, j'ai copié/collé ton code et ça ne marchait pas, et même en changeant juste le counter ça ne marche pas non plus de toute manière.
Mais, le problème majeur est qu'excel me demande si je veux écraser les données déjà existantes alors que le deuxième fichier que j'importe s'écrit sur les lignes vides en dessous du premier fichier importé...
J'ai fini par trouver, finalement.
Merci quand même de l'aide.