Import automatique fichier texte

  • Initiateur de la discussion Initiateur de la discussion alb05
  • 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 !

alb05

XLDnaute Occasionnel
Bonjour
comment automatiser l'importation du fichier texte dans une base excel ?
Mon besoin est de venir ajouter des enregistrements à la suite dans base: récupération périodique de nouvelle données.

ci joint un exemple avec présence de données du dernier trimestre 2008 auxquelles je voudrai ajouter celles du 2er trimestre 2009.
merci
 

Pièces jointes

Re : Import automatique fichier texte

Salut,

Avec l'enregistreur de macro et quelques adaptations mineurs (que j'ai mi en gras):

Code:
Option Explicit

Sub Import()
    [B]Dim Qtable As QueryTable[/B]
    
    With [B]Feuil1[/B].QueryTables.Add(Connection:= _
        "TEXT;" [B]& ThisWorkbook.Path & [/B]"\Fichier input.txt", Destination:=[B]Feuil1.Range("A65536").End(xlUp).Offset(1)[/B])
        .Name = "Fichier input"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 4, 9)
        .TextFileFixedColumnWidths = Array(4, 2, 10, 6, 6, 6, 10)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    
[B]    For Each Qtable In Feuil1.QueryTables
        Qtable.Delete
    Next[/B]
End Sub
++
Minick
 
Re : Import automatique fichier texte

Bonjour,

Tu peux également essayer ceci :

Code:
Sub Test()
NomFic = "C:\Fichier input.txt"
Workbooks.OpenText Filename:=NomFic, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(4, 1), Array(6, 1), Array(16, 1), Array(22, 1), Array(28, 1), Array(34, xlDMYFormat))
ActiveSheet.Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Range("A65536").End(xlUp).Offset(1, 0)
ActiveWorkbook.Close False
End Sub
Voir le fichier joint
 

Pièces jointes

Re : Import automatique fichier texte

Bonjour
en complément;
comment préciser que le champ contenu en colonnes 5&6 soit du Texte.
En fait, comment forcer un champ dans un type donné.

D'autre part, comment ajouter au fichier de sortie un nouveau champ calculé à partir du fichier d'entrée :
Fichier d'entrée :
2009T2MARTINEZ Julien 1 GRIS15/05/2009
2009T2DUPOND Pierre 10 JAUNE25/04/2009
2009T2DURAND Alain 85 ROSE12/06/2009

Fichier de sortie
Ajouter un champ contenant le MOIS et un champ Valide avec 'X' si QTE > 50

merci de votre aide
 

Pièces jointes

Re : Import automatique fichier texte

bonjour
ok pour cet exemple mais comment forcer en TEXTE une colonne qui contient parfois de l'alphanumérique et parfois que du numérique ?
Entrée :
12X01Pascal 10560
30R80Alain 8040
54002Pierre 970

Sortie attendue :
CODE PRENOM QTE
12X01 Pascal 105,60
30R80 Alain 80,40
54002 Pierre 9,70

Les pb à résoudre :
- le CODE doit être du TEXTE sinon le 54002 sera vu comme un nombre et alors cadré à droite
- comment dire que la colonne QTE est avec 2 décimales

merci
 

Pièces jointes

Re : Import automatique fichier texte

Bonjour,

Ci-joint les modifications demandées qui fontionnent avec le fichier txt précédent (à adapter dans le nouveau contexte).
Ici le champ ANNEE sera en Texte.


Code:
Sub Test()
Chemin = ThisWorkbook.Path
NomFic = "Fichier input.txt"
'-----------------------------
ThisWorkbook.Sheets("Feuil1").Range("A1").CurrentRegion.Offset(1, 0).Clear 'S'il supprimer les anciennes données
Workbooks.OpenText Filename:=Chemin & "\" & NomFic, DataType:=xlFixedWidth, FieldInfo:=Array([COLOR="Blue"][B]Array(0, xlTextFormat)[/B][/COLOR], Array(4, 1), Array(6, 1), Array(16, 1), Array(22, 1), Array(28, 1), Array(34, xlDMYFormat))
ActiveSheet.Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets(1).Range("A65536").End(xlUp).Offset(1, 0)
ActiveWorkbook.Close False
Set Dest = ThisWorkbook.Sheets("Feuil1").Range("A2:" & ThisWorkbook.Sheets("Feuil1").Range("A65535").End(xlUp).Address)
With Dest
    .Offset(0, 7).FormulaR1C1 = "=MONTH(RC[-1])"
    [COLOR="blue"][B].Offset(0, 7).NumberFormat = "00"[/B][/COLOR]
    .Offset(0, 8).FormulaR1C1 = "=IF(RC[-4]>50,""X"","""")"
    .Offset(0, 7).Resize(, 2).HorizontalAlignment = xlCenter
End With
End Sub

Avec FieldInfo (sur la ligne OpenText), sur le champ 1 (Array(0, xlTextFormat)) on définit la taille de chaque champ ainsi que son format. D'apres ta remarque, on pourrait également centrer ou aligner (G / D) le contenu de la cellule. Par exemple : Columns(1).HorizontalAlignment = xlCenter

Avec NumberFormat = "00" le format est sur 2 digits
 
Dernière édition:
Re : Import automatique fichier texte

ok
mais comment dire que 10560 est égale à 105,60 ?

et aussi comment supprimer une colonne comme le fait la fonction "colonne non distribuée" lorsque l'on fait manuellement l'import d'un fichier texte ?


merci
 
Dernière édition:
- 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

A
Réponses
11
Affichages
2 K
A
Z
Réponses
9
Affichages
2 K
Z
S
Réponses
0
Affichages
906
Street filou
S
Retour