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.

Rechercher des sujets similaires à "copier tout fichier txt feuille vba"