Récupérer les données d'un fichier texte dans Excel

Bonjour, après avoir regardé les sujets similaire au mien je n'arrive pas à trouver de solution à mon problème.

En se moment j'utilise une un fichier exel pour réaliser une série de calcul, se fichier est constitué de 3 feuille.

La feuille1 servant à coller les données à traiter, la feuille2 effectue les calculs et la feuil3 est un récapitulatif des calculs.

Actuellement les données que je dois collés dans la feuille1 se trouve dans des fichiers textes, j'ouvre donc le fichier texte, je copie la première colonne du fichier texte et je viens la collé dans la cellule A1 de la feuil1 de mon fichier de traitement. Une série de macro s'occupe ensuite de traiter les données.

Je voudrais rajouter sur ma Feul1 un bouton me permettant de choisir l'emplacement du fichier texte ou je dois récupérer mais données, une fois le fichier sélectionner je voudrais que cette macro aille directement chercher la première colonne du fichier texte précédemment sélectionner pour venir la coller dans la cellule A1 de ma feul1.

Merci d'avance.

Up svp

Actuellement j'ai fais sa.

Sub Selectionnerdonnées()

Dim Entree As Workbook, Sortie As Workbook

NomFichierSortie = ThisWorkbooks

Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")

If Nomfichierentree <> False Then

Set Entree = Workbooks.Open(Nomfichierentree)

Range("A:A").Select

Selection.Copy

Windows("NonFichierSortie").Activate

Sheets("Feuil1").Select

Range("A1").Select

Selection.Paste

Sortie.Close

End If

' On ferme le second

Entree.Close

End Sub

Le problème arrive au moment ou il faut retourner sur ma feuille pour coller les données, j'ai l'impression qu'il ne comprend pas sur quel feuille il doit coller les données. ( erreur d’exécution 9 l'indice n'appartient pas à la sélection ).

Bonjour,

NOMfichierSortie et NONfichierSortie

D'où l’intérêt de déclarer les variable et l'utilisation de OptionExplicit.

Option Explicit

Private Sub CommandButton1_Click()
Dim Entree As Workbook
Dim Nomfichierentree As String
Dim NomfichierSortie As String

    NomfichierSortie = ThisWorkbooks.Name
    Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")

    If Nomfichierentree <> False Then
        Set Entree = Workbooks.Open(Nomfichierentree)
        Range("A:A").Copy
        Windows("NomfichierSortie").Sheets("Feuil1").Select
        Range("A1").Paste
        Entree.Close
    End If
End Sub

A+

lermite a écrit :

Bonjour,

NOMfichierSortie et NONfichierSortie

D'où l’intérêt de déclarer les variable et l'utilisation de OptionExplicit.

Option Explicit

Private Sub CommandButton1_Click()
Dim Entree As Workbook
Dim Nomfichierentree As String
Dim NomfichierSortie As String

    NomfichierSortie = ThisWorkbooks.Name
    Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")

    If Nomfichierentree <> False Then
        Set Entree = Workbooks.Open(Nomfichierentree)
        Range("A:A").Copy
        Windows("NomfichierSortie").Sheets("Feuil1").Select
        Range("A1").Paste
        Entree.Close
    End If
End Sub

A+

Bonjours, merci de ta réponse mais je n'arrive pas à faire fonctionner ta macro.

Es ce que je dois collé ta macro sous Sub Selectionnerdonnées() ? Peux tu m'expliquer le fonctionnement de ta macro svp

Je n'ai pas tester vu que j'ai pas ton fichier txt.

Dans ton poste précédant tu parle de Bouton, c'est donc le code qu'il faut mettre dans le code du bouton.

Pour Tester si ça fonctionne met le curseur dans la macros et tape F5.

et pour NON et NOM c'est pour Fichier Sortie

Tu dis

lermite a écrit :

Je n'ai pas tester vu que j'ai pas ton fichier txt.

Dans ton poste précédant tu parle de Bouton, c'est donc le code qu'il faut mettre dans le code du bouton.

Pour Tester si ça fonctionne met le curseur dans la macros et tape F5.

et pour NON et NOM c'est pour Fichier Sortie

Tu dis

Je comprend pas se que tu veux dire, moi en début de macro je lui donne un Nom, dans le cas de cette macro:

Sub Selectionnerdonnées() et ensuite j'affecte cette macro à mon bouton.

J'ai copier, collé ta macro sous Sub Selectionnerdonnées() mais elle ne fonctionne pas. Erreur de compilation

J'ai l'impression qu'il ne comprend pas Option Explicit

Je commence vraiment à désespérer, 10h que je suis dessus.

10hrs.. il m'arrive de chercher une solution pendant un mois et quelque fois encore plus..

Faut de la patience si tu veux progresser.

Me semblais bien que ta macros n'irai pas, ont "Ouvre" pas un fichier texte ont l'importe, voir avec

Sub ChargerFichier()
Dim St As String
    St = "C:\Repertoire\Fichier.txt"
    Sheets("NomFeuille").Columns("A:C").ClearContents

    With Sheets("NomFeuille").QueryTables.Add(Connection:= _
        "TEXT;" & St, Destination:=Sheets("NomFeuille").Range("A1"))
        .Name = "AuChoix"
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .AdjustColumnWidth = True
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(4, 4, 1)
        .TextFileFixedColumnWidths = Array(10, 9)
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub

Et comme tu manque de patience je te laisse cogiter sur ce code, éventuellement tu le fais avec l'éditeur de macro pour les paramètres.

Cordialement.

J'ai essayer de résoudre mon problème grâce à l'enregistreur de macro mais il y a encore un Hic.

Voila ma macro:

Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")

Workbooks.Open Filename:=Nomfichierentree

Entre = ActiveWorkbook.Name

Workbooks(Entre).Close False

MsgBox (Entre)

Workbooks.OpenText Filename:= _

"Entre" _

, Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _

Array(Array(0, 4), Array(10, 1), Array(19, 1), Array(31, 1), Array(43, 1), Array(55, 1), _

Array(67, 1), Array(79, 1)), TrailingMinusNumbers:=True

ActiveWindow.WindowState = xlMaximized

ActiveWindow.WindowState = xlNormal

With ActiveWindow

.Top = 4

.Left = 261.25

End With

Range("A1").Select

Range(Selection, Selection.End(xlToRight)).Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

Windows("test.xls").Activate

ActiveWindow.SmallScroll Down:=-21

Range("A1").Select

ActiveSheet.Paste

Application.CutCopyMode = False

Range("K8").Select

End Sub

Alors avec la macro enregistrer je ne pouvais pas choisir le fichier à importer, j'ai donc décider de rajouter un getopenfile pour choisir le fichier moi même, j'enregistre ensuite le Nom du fichier dans la variable Entre grâce à un ActiveWorkbook.Name.

J'ai ensuite remplacer le nom du fichier dans ma macro de base par ma variable Entre et la sa ne veut plus marcher.

Si j'écris le nom du fichier la macro marche bien, mais si je remplace le nom du fichier par ma variable Entre correspond au nom du fichier sa ne marche pas.

Quelqu'un peut'il m'expliquer comment résoudre se problème ?

Re,

Il ne faut pas créer un nouveau classeur, il fat mettre le fichier txt sur une feuille.

Tu peu déposer un exemple de ton fichier txt ?, je verrais pour l'adapter

Voila mon fichier texte.

Pour le moment j'essaye de copier les données du fichier texte dans un classeur test mais je devrais ensuite le coller dans mon classeur ou je travaille qui contient 3 feuilles. Du moment que je comprenne la méthode, j'arriverai à l'adapter à mon classeur.

Pourquoi tu dis que je créer un nouveau classeur ? Ma macro me permet de choisir le .txt à ouvrir, ensuite j'ouvre le .txt, je récupère le nom du .txt, je referme le .txt. Et je vais ensuite ouvrir se .txt pour copier les données souhaité

J'ai commencé à coder en VBA depuis la semaine dernière, je suis donc débutant et je ne comprend encore pas tout.

L'erreur qu'il me dit actuellement est: d:\User\Dupont\Desktop .... introuvable. Vérifier l'orthographe.......

Je vois pas pourquoi il me dit sa car quand je rentre le nom du fichier directement sa marche très bien.

Merci d'avance.

Essaye avec..

Sub ChargerFichier()
Dim Nomfichierentree As String
    Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")
    If Nomfichierentree = "Faux" Then Exit Sub 'cliquer sur annuler
    Workbooks.OpenText Filename:= _
        Nomfichierentree, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10 _
        , 1), Array(19, 1), Array(31, 1), Array(43, 1), Array(55, 1), Array(67, 1), Array(79, 1)), _
        TrailingMinusNumbers:=True
    'ICI Faire les copies que tu à besoin..
    '....

    ActiveWorkbook.Close
End Sub

Tu dis

Edit: Pour automatiser les copies tu dis les données à copier et où ?

Alors j'ai ajouté les copiés collé à faire dans ta macro mais j'ai une erreur.

En faite l'objectif est de pouvoir choisir le fichier.txt que je veux importer.

Il faut copier toutes les données du fichier texte et venir les coller dans le fichier source

La macro:

Sub ChargerFichier()

Dim Nomfichierentree As String

Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")

If Nomfichierentree = "Faux" Then Exit Sub 'cliquer sur annuler

Workbooks.OpenText Filename:= _

Nomfichierentree, Origin:=xlMSDOS, _

StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10 _

, 1), Array(19, 1), Array(31, 1), Array(43, 1), Array(55, 1), Array(67, 1), Array(79, 1)), _

TrailingMinusNumbers:=True

ActiveWindow.WindowState = xlMaximized

ActiveWindow.WindowState = xlNormal

With ActiveWindow

.Top = 4

.Left = 261.25

End With

Range("A1").Select

Range(Selection, Selection.End(xlToRight)).Select

Range(Selection, Selection.End(xlDown)).Select

Selection.Copy

Windows("test.xls").Activate

ActiveWindow.SmallScroll Down:=-21

Range("A1").Select

ActiveSheet.Paste

Application.CutCopyMode = False

Range("K8").Select

ActiveWorkbook.Close

End Sub

Au niveau de RangeA1.select il me met une erreur ....

Le problème arrive toujours au moment ou il faut copier les données du fichier texte pour les coller dans le fichier source.

Option Explicit

Sub ChargerFichier()
Dim Nomfichierentree As String, S As String
Dim Col As Long, Lig As Long
Dim WkSortie As Range
    Application.DisplayAlerts = False
    Set WkSortie = ActiveSheet.Range("A1")
    Nomfichierentree = Application.GetOpenFilename("Fichier Texte (*.txt), *.txt")
    If Nomfichierentree = "Faux" Then Exit Sub 'cliquer sur annuler
    Workbooks.OpenText Filename:= _
        Nomfichierentree, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(10 _
        , 1), Array(19, 1), Array(31, 1), Array(43, 1), Array(55, 1), Array(67, 1), Array(79, 1)), _
        TrailingMinusNumbers:=True
    'ICI Faire les copies que tu à besoin..
    '....
    With ActiveWorkbook
        S = "A1:" & Range("A1").SpecialCells(xlCellTypeLastCell).Address
        ActiveSheet.Range(S).Copy
        .Close
    End With
    Range("A1").Select
    ActiveSheet.Paste
    Application.DisplayAlerts = True
End Sub

Ca devrait aller..

A+

Déjà merci de ton aide.

On arrive vers un truc parfait, alors j'ai testé ta macro, elle fonctionne mais elle me copie seulement les deux première colonne de mon fichier texte alors qu'il faudrait qu'elle copie les 8 première colonne.

Je ne vois pas dans la macro ou je peux choisir les colonne à copier.

Avec le fichier texte que tu a poster j'ai bien 8 colonnes qui sont copiées

Tu est certain que dans le fichier que tu teste il y a 8 colonnes ?

Tu test avec le même fichier ?

Tu dis

EDIT : Je viens de retester la macro et il y a bien 8 colonnes.

Oui je test avec le même fichier que je t'es donné.

Alors il me copie les deux première colonne puis me les supprimes toutes ( les 8 ) et vient les collés dans le fichier sources (les 2 colonnes)

On voit bien au moment de la sélection qu'il prend seulement les deux premières colonnes.

Voir le classeur..

Y faut RIEN AJOUTER dans le code

91yoda-v1.xlsm (28.62 Ko)

Merci c'est parfait.

Quand tu aura le temps es ce que tu pourrais m'ajouter des lignes de commentaire pour que je comprenne ta démarche.

Encore merci.

Comme demandé et j'ai enlevé ce qui n'était pas nécessair, c'est resté après les essais que j'ai fais.

Tu vois qu'avec de la patience et de la persévérance ont y arrive !!

A+

145yoda-v2.xlsm (28.61 Ko)

Merci pour les explications, je commence à comprendre.

Rechercher des sujets similaires à "recuperer donnees fichier texte"