Copier tout un fichier .txt sur une feuille Excel en VBA
Bonjour,
Je vous envois ce petit message car j'ai un probléme qui dépasse mes compétences en VBA. Je voudrais extraire toutes les données d'un fichier texte et les coller sur une feuille excel. Mais je n'y arrive pas ...
Pouvez vous m'aider?
Je n'ai donc aucun début de code :/
Merci d'avance.
Cordialement,
U_goffu
Bonjour,
Tu as la possibilité d'ouvrir un fichier txt dans Excel :
Fichier /Ouvrir sélectionner le répertoire et afficher les fichiers txt en cliquant sur le bouton (en bas à droite de la fenêtre) qui indique "Tous les fichiers Excel" et sélectionner "fichiers texte (*.prn;*txt;*.csv)" Puis choisi le fichier à importer.
Tu peux ensuite déplacer la feuille de données vers le classeur de ton choix.
Mais ça me semble trop simple. Ton problème est-il plus complexe ?
Sa semble marcher, alors j'ai enregistré cette procédure avec l'enregistreur de macro et j'ai remplacé par quelques variables que j'avais défini. Néanmoins, maintenant j'ai deux autres problèmes qui sont survenu. Je vous montre un extrait de mon code qui pose probléme :
Option Explicit
'declaration of variable for .txt
Public ObjShell, ObjFolder, Chemin
Public NomFichier As String, Nomtypefichier As String
Public NomChargement As Variant
'declaration of Sheets/Workbook
Dim objWorkbookSource As Workbook, objWorkbookCible As Workbook
'declaration for function "FichierExiste"
Dim MonFichier As String
Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet, Ws4 As Worksheet, Ws5 As Worksheet, Ws6 As Worksheet
Dim Ws7 As Worksheet, Ws8 As Worksheet, Ws9 As Worksheet, Ws10 As Worksheet, Ws11 As Worksheet, Ws12 As Worksheet
Sub Macro_D05()
Application.DisplayAlerts = False
Call Initialization 'call the macro for declaration of each sheets
' --------- variant declaration (stage1)
Dim b As String
Dim sheet As Integer
Dim j As Integer, k As Integer, l As Integer
Dim RowNdx As Long, RowNdx2 As Long
Dim extension As Variant
Dim derligne As Long
' --------- variant declaration (stage2)
Dim nameresultsheet As String, namedatasheet As String
Dim begincopyline As Long
Dim lastpastline As Long
Dim lastcopyline As Long
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 4)
xlApp.SheetsInNewWorkbook = 4
'On ajoute un classeur
Set objWorkbookCible = xlApp.Workbooks.Add
MonFichier = Chemin & "\" & "Classeur_Temporaire.xls"
If FichierExiste(MonFichier) = True Then
'MsgBox "Questo file esiste gia" & vbCrLf & "Rinominare il o cancellare il"
If MsgBox("Questo file esiste gia" & vbCrLf & "Si desidera cancellare?", vbYesNo) = vbYes Then
Kill (MonFichier)
Else
Exit Sub
End If
End If
'On donne un nom au classeur
With objWorkbookCible
.SaveAs Filename:=Chemin & "\" & "Classeur_Temporaire.xls"
End With
'On rend le classeur visible
xlApp.Visible = True
objWorkbookCible.Visible = True
'On rend l'autre classeur invisible
Workbooks(objWorkbookSource.name).Visible = False
'On rend le classeur temporaire visible
Windows(objWorkbookCible.name).Visible = True
ActiveWindow.WindowState = xlMaximized
objWorkbookSource.Activate
'Création des feuilles
Set xlSheet = objWorkbookCible.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.name = "80000 tir"
'on libère l'objet onglet pour pouvoir en créer un nouveau...etc
Set xlSheet = Nothing
Set xlSheet = objWorkbookCible.Worksheets(2)
xlSheet.name = "80000 ril"
Set xlSheet = Nothing
Set xlSheet = objWorkbookCible.Worksheets(3)
xlSheet.name = "50000 tir"
Set xlSheet = Nothing
Set xlSheet = objWorkbookCible.Worksheets(4)
xlSheet.name = "50000 ril"
'Activation du classeur qui va recevoir les données
objWorkbookCible.Sheets("80000 tir").Activate
objWorkbookCible.Sheets("80000 tir").Select
objWorkbookCible.Sheets("80000 tir").Cells(1, 1).Select
' ----- import data
With ActiveSheet.QueryTables.Add(Connection:="TEXT;NomFichier", Destination:=Range("$A$1"))
.name = Mid(NomChargement, 1, Len(NomChargement) - 4)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Application.DisplayAlerts = True
End Sub
Les parties en couleurs sont celles qui me posent des problémes, car :
- Je n'arrive pas à avoir le focus sur mon classeur temporaire pour pouvoir coller les infos issus de mon fichier texte,
- La partie d'importation du fichier texte ne semble pas reconnaitre mes paramétres.
Cordialement,
U_goffu
Je viens de trouver une de mes erreurs et un probléme est réglé, mais il me reste toujours le probleme de classeur actif.
PS l'erreur était que sur cette ligne :
With ActiveSheet.QueryTables.Add(Connection:="TEXT;NomFichier", Destination:=Range("$A$1"))
.name = Mid(NomChargement, 1, Len(NomChargement) - 4)
Ma variable était entouré de guillemet, avec "TEXT;" & NomFichier, tout fonctionne.