Macro pour importer un fichier txt
Bonjour à tous,
Débutante en VBA je viens vers vous pour une question qui va vous paraître plutôt simple mais que je n'arrive pas à résoudre malgré mes nombreuses recherches.
Il me faut automatiser l'importation d'un fichier txt dans un tableau excel, avec des colonnes précises.
Mon tableau dans excel est placé en (A19:E43). Les colonnes sont nommées exactement comme les colonnes de mon fichier txt, et dans le même ordre. Les données du fichier txt sont séparées par des ";".
J'utilise un bouton qui me lance l'ouverture d'une nouvelle feuille selon un modèle précis, la renomme, et par j'aimerais du coup que l'importation des données txt se lance par la suite.
J'ai réussi à mettre en place un userform qui me permet de sélectionner le fichier.
Mais lors de l'importation rien ne se passe ou les données se copie en A1 et dans une unique colonne.
Sub NouvellefeuilleContrôle()
Sheets("Modèle").Select
Cells.Select
Selection.copy
Sheets.Add after:=Sheets(Sheets.Count)
Cells.Select
ActiveSheet.Paste
Dim resultat As Integer
plage = Application.InputBox("Sélectionnez une Orientation de Gestion dans la feuille Convention ", "Orientation de Gestion", Type:=2)
If plage = "Faux" Or plage = "" Then Exit Sub
range("A1").Value = plage
MsgBox ("La plage que vous avez séléctionné est : " & plage)
ActiveSheet.Name = plage
Dim Fichiertxt
MsgBox ("Sélectionnez le fichier d'allocation")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichiertxt <> False Then
With plage
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
End With
End If
End Sub
Je reste à l'écoute de tous conseils. J'ai débuté il y a une semaine donc svp soyez indulgent. Merci d'avance.
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-dessous un code qui devrait fonctionner
Sub NouvellefeuilleContrôle()
Dim feuille As Worksheet
Dim nom As String
Dim Fichiertxt As Variant
Sheets("Modèle").Copy after:=Sheets(Sheets.Count)
Set feuille = ActiveSheet
nom = Application.InputBox("Sélectionnez une Orientation de Gestion dans la feuille Convention ", "Orientation de Gestion", Type:=2)
If nom = "Faux" Or nom = "" Then Exit Sub
Range("A1").Value = nom
MsgBox ("Le nom que vous avez séléctionné est : " & nom)
feuille.Name = nom
MsgBox ("Sélectionnez le fichier d'allocation")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichiertxt <> False Then
With feuille.QueryTables.Add(Connection:="TEXT;" & Fichiertxt, Destination:=Range("$A$19"))
.Name = nom
.FieldNames = True
.PreserveFormatting = True
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End If
End Sub
Bonjour Thev, je te remercie mille fois. Ton code fonctionne presque parfaitement. Il importe bien mon fichier txt, sauf qu'il me décale mon tableau dans excel.
Je m'explique mon fichier txt est composé de cinq colonnes et mon tableau excel aussi ( A19:E43). Lors de l'importation du fichier txt au lieu d'insérer les données dans mon tableau, une colonne est insérer, et situe mon tableau en (B19:F43). Les données sont bien insérer en (A19:E43) mais sont décalé à cause de l'insertion d'une nouvelle colonne en amont de mon tableau.
Je re précise que mes colonnes dans excel et dans mon fichier txt ont exactement le même nom.
Merci d'avance
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
ci-joint code modifié pour intégrer le format du modèle
Sub NouvellefeuilleContrôle()
Dim feuille As Worksheet
Dim nom As String
Dim Fichiertxt As Variant
Sheets.Add after:=Sheets(Sheets.Count) 'nouvelle feuille vierge
Set feuille = ActiveSheet 'assignation feuille active
nom = Application.InputBox("Sélectionnez une Orientation de Gestion dans la feuille Convention ", "Orientation de Gestion", Type:=2)
If nom = "Faux" Or nom = "" Then Exit Sub
Range("A1").Value = nom
MsgBox ("Le nom que vous avez séléctionné est : " & nom)
feuille.Name = nom
MsgBox ("Sélectionnez le fichier d'allocation")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichiertxt <> False Then
With feuille.QueryTables.Add(Connection:="TEXT;" & Fichiertxt, Destination:=Range("$A$19"))
.Name = nom
.FieldNames = True
.PreserveFormatting = True
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End If
'formatage suivant modèle
Sheets("Modèle").Cells.Copy
feuille.Cells.Select
Selection.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
Ce code fonctionne également, sauf qu'il me copie mon modèle sans toutes les formules comprises dans la feuille modèle, alors que dans ton premier code il me récupérai la mise en page et toutes les formules.
Par contre les données s'insère dans le bon tableau et au bon endroit.
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Il suffit d'ajouter une ligne pour copier les formules
Sheets("Modèle").Cells.Copy
feuille.Cells.Select
Selection.PasteSpecial Paste:=xlPasteFormats
Selection.PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
Du coup le rajout de cette ligne efface mon importation txt ...
J'avais essayé avec xlpastevalues aussi mais ça n'a rien changé
Si tu sais comment faire ce serait génial. Merci beaucoup je désespère.
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Je ne peux pas t'aider plus si tu ne communiques pas ta feuille modèle.
Pas de soucis Voici le fichier modèle. J'ai effacé quelques formules car il était trop lourd.
Je dois insérer les données de mon fichier txt dans le tableau bleu en A19:D43.
Excuse moi pour le msg privé finalement c'est passé.
- Messages
- 4'096
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
ci-joint nouveau code
Sub NouvellefeuilleContrôle()
Dim feuille As Worksheet
Dim formules_modèles As Range
Dim nom As String
Dim Fichiertxt As Variant
Sheets.Add after:=Sheets(Sheets.Count) 'nouvelle feuille vierge
Set feuille = ActiveSheet 'assignation feuille active
nom = Application.InputBox("Sélectionnez une Orientation de Gestion dans la feuille Convention ", "Orientation de Gestion", Type:=2)
If nom = "Faux" Or nom = "" Then Exit Sub
Range("A1").Value = nom
MsgBox ("Le nom que vous avez séléctionné est : " & nom)
feuille.Name = nom
MsgBox ("Sélectionnez le fichier d'allocation")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichiertxt <> False Then
With feuille.QueryTables.Add(Connection:="TEXT;" & Fichiertxt, Destination:=Range("$A$19"))
.Name = nom
.FieldNames = True
.PreserveFormatting = True
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End If
'formatage suivant modèle
Sheets("Modèle").Cells.Copy
feuille.Cells.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
'recopie formules modèle
Set formules_modèles = Sheets("Modèle").Cells.SpecialCells(xlCellTypeFormulas)
feuille.Range(formules_modèles.Address).Formula = formules_modèles.Formula
End Sub
Bonjour,
Merci encore une fois pour ce code. Sauf que pour les formules, ça n'a pas respecté les formules du modèle. Dans toutes les cellules où une formule était présente une unique formule est inséré. Et non celle que j'avais créer au départ.
Je cherche une solution si j'en trouve une je la posterai
Excuse moi autant pour moi le modèle que je t'ai fourni ne contient pas toutes mes formules. Je les avait effacé car elle contenait des recherche v avec des fichiers sources de mon entreprise. Mais n'empêche qu'avec ton code ça devrait fonctionner...
As tu besoin d'un modèle avec toutes les formules ?
Encore une fois mille excuses
J'ai réussi à modifier la macro pour obtenir ce que je veux. La voici pour ceux que ça intéresse
Sub NouvellefeuilleContrôle()
Dim feuille As Worksheet
Dim formules_modèles As Range
Dim nom As String
Dim Fichiertxt As Variant
Sheets.Add after:=Sheets(Sheets.Count) 'nouvelle feuille vierge
Set feuille = ActiveSheet
'assignation feuille active
Sheets("convention").Select
nom = Application.InputBox("Sélectionnez une Orientation de Gestion dans la feuille Convention ", "Orientation de Gestion", Type:=2)
If nom = "Faux" Or nom = "" Then Exit Sub
MsgBox ("Le nom que vous avez séléctionné est : " & nom)
feuille.Name = nom
feuille.Select
Range("A1").Value = nom
feuille.Select
MsgBox ("Sélectionnez le fichier d'allocation")
Fichiertxt = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If Fichiertxt <> False Then
With feuille.QueryTables.Add(Connection:="TEXT;" & Fichiertxt, Destination:=Range("$A$19"))
.Name = nom
.FieldNames = True
.PreserveFormatting = True
.SaveData = True
.AdjustColumnWidth = True
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh BackgroundQuery:=False
End With
End If
'formatage suivant modèle SELECTION
Sheets("Modèle").Cells.Copy
feuille.Cells.PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Sheets("Modèle").Select
Range("H19:U43").Select
Selection.Copy
feuille.Select
Range("H19").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Modèle").Select
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 1
Range("A2:U18").Select
Application.CutCopyMode = False
Selection.Copy
feuille.Select
Range("A2:U18").Select
ActiveSheet.Paste
Range("B12").Select
End Sub
merci thev pour ton aide tu m'as été d'un grand secours