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.

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

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.

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.

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é.

498classeur2.xlsx (23.52 Ko)

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

Rechercher des sujets similaires à "macro importer fichier txt"