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 SubA+
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 SubA+
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..
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 SubEt 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 SubTu 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 SubCa 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.
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+
Merci pour les explications, je commence à comprendre.