XL 2010 importer plusieurs fichier txt dans le même classeur

  • Initiateur de la discussion Initiateur de la discussion jojo2006
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jojo2006

XLDnaute Occasionnel
Bonjour à tous,

je souhaiterai réaliser une macro vba pour importer plusieurs fichiers fichiers txt dans un classeur excel
à partir d'une fenêtre où je sélectionne tous mes fichiers txt.

j'ai fais un enregistrement pour importer 1 fichier et j'obtiens le code suivant.

Pouvez vous me dire comment boucler pour le code ci dessous s'adapte avec les noms des fichiers sélectionnés (jamais identiques) et pour que les données soient copiées les unes à la suite des autres en ligne ?

je vous remercie d'avance pour votre aide.


VB:
Sub import1()
'
' import1 Macro
'

'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\moi\Desktop\V1.0P_1_chr.txt" _
        , Destination:=Range("$A$1"))
        .Name = "A20994_CTRL_LAMAGE_V1.0P_1_chr"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
 

Pièces jointes

Bonjour,

Voici une macro simple qui fonctionnera si tous vos fichiers ont la même structure. Une feuille est créée par importation.
La macro Importer n'est que très lègèrement modifiée
VB:
Sub Fichiers_Imports_multiple()
    Dim Fichiers As Variant
    Dim I As Integer

    Fichiers = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", Title:="Sélection un ou des Fichier(s)", MultiSelect:=True)

    If IsArray(Fichiers) Then
        For I = 1 To UBound(Fichiers)
            Importer Fichiers(I)
        Next
    End If
End Sub

Avec Power Query (en addOn gratuit pour 2010) vous pourriez plus facilement manipuler et transformer vos fichier.


Cordialement
 

Pièces jointes

Bonjour Hasco,

c'est très bien cette petite macro je l'ai testé ça marche bien.🙂

Merci beaucoup !!!

ceci dit, je souhaiterait que les données de chaque fichier soit sur une feuille unique .

J'ai au moins 300 fichiers à importer donc cette solution qui crée des feuilles à chaque fichier n'est pas pertinente pour mon objectif d'analyse.

Dans la macro importer() au lieu de créer une feuill à chaque fois

VB:
' Création d'une nouvelle feuille
Set ws = ThisWorkbook.Sheets.Add()

, on reste sur la feuille de destination ( par exemple "data") et on change le range de la destination

Code:
 With ws.QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ws.Range("$A$1"))


du coup j'ai modifié ton code pour avoir celà.

ce n'est pas optimal ( recherche de la derniere ligne à chaque fichier importé) mais ça marche.

il faut juste que je trouve comment ne pas importer l'entête de chaque fichier.
sinon je fais une autre macro pour épurer en fin d'importation.

Vos avis ?

merci à tous


Code:
Sub Importer(ByVal fichier As String, Optional NomDuTableau As String)
'Dim ws As Worksheet
'
' Si fichier inexistant alors sortir
If Dir(fichier) = "" Then Exit Sub
'
' Création d'une nouvelle feuille
'Set ws = ThisWorkbook.Sheets.Add()
'

Dim i As Integer

i = 1

'cherche la dernière ligne sur la feuille "data"

Sheets("data").Select

Do While Cells(i, 1).Value <> ""

i = i + 1
Loop

   
      With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=Range(Cells(i, 1), Cells(i, 1)))
   
   
        If NomDuTableau <> "" Then .Name = NomDuTableau
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
 
Re,

Vous avez 2 propriétés :
1 - FieldNames mettez la à true 'Ne considèrera pas la première ligne de données comme entête
2 - TextFileStartRow mettez la à 2 ' Les données seront importées à partir de cette ligne

Et cela devrait le faire


VB:
'cherche la dernière ligne sur la feuille "data"

Sheets("data").Select

Do While Cells(i, 1).Value <> ""

i = i + 1
Loop

Oh !!! ben c'est vous qui n'avez pas beaucoup chercher. C'est une des premières demandes de tous les forum vba excel !!!!

Première ligne non occupée de Datas en colonne 1:
Code:
Dim C as range 'en tête de macro

Set C = Sheets("Data").Cells(Rows.Count, 1).End(xlUp)(2)

et ensuite : QueryTables.Add (...., Destination:= C)

cordialement
 
Bonjour le fil

Hasco (salutations 😉)
D'après le site de Microsoft, il faut un Excel 2010 Pro.
Pour 2013, peut importe la version (j'en suis témoin)
Je ne sais si il y a des XLDnautes qui ont tenté l'installation sur XL 2010 Home ou Etudiant avec succès.

NB: Au taf, ma DSN me l'avait installé sur un XL 2010 PRO
Heureusement en 2022, nous sommes passé à Office 2019 (tout en restant avec 2010 sous Citrix !!!)
 
Bonjour à tous;

dans ce cas, je veux importer les fichiers séparément dans différente feuille
merci.

VB:
Option Explicit

Sub Fichiers_Imports_multiple()
    Dim Fichiers As Variant
    Dim I As Integer

    Fichiers = Application.GetOpenFilename(FileFilter:="Text Files (*.txt), *.txt", Title:="Sélection un ou des Fichier(s)", MultiSelect:=False)

    If IsArray(Fichiers) Then
        For I = 1 To UBound(Fichiers)
            Importer Fichiers(I)
        Next
    End If
End Sub
Sub Importer(ByVal fichier As String, Optional NomDuTableau As String)
Dim ws As Worksheet
Dim TXT As String
Dim d As String
Dim AddInName As String
'
' Si fichier inexistant alors sortir
If Dir(fichier) = "" Then Exit Sub
'
' Création d'une nouvelle feuille
AddInName = "Etalonnage de Volume"
TXT = ThisWorkbook.Path & "\" & AddInName & ".txt"
If TXT = "fichier" Then
d = "Etalonnage de Volume"
Else
d = "Etalonnage de Pression"
End If
Set ws = ThisWorkbook.Sheets(d)
'
    With ws.QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ws.Range("$A$1"))
        If NomDuTableau <> "" Then .Name = NomDuTableau
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
 

Pièces jointes

Bonjour,

@johanvba : créez votre propre discussion plutôt que de squatter ce fil, qui ne répond pas à votre besoin, d'autant qu'il semble que vous utilisiez excel 2016 et non 2010.
Dans votre nouvelle discussion décrivez plus précisement votre besoin.
 
Bonjour le fil


@Hasco (salute 😉 )
Le fil est déjà créé
J'y ai même pondu un petit peu de VBA...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Power Query power query
Réponses
22
Affichages
4 K
Retour