XL 2010 Importer .txt sur feuille Excel

thunder23

XLDnaute Occasionnel
Bonjour le forum,

Je souhaite importer les données d'un fichier en format texte sur une feuille Excel mais par VBA et avec la même mise en forme que dans le fichier .txt .
Un exemple est disponible en pièce jointe

Merci pour commentaires :)
 

Pièces jointes

  • testimport.xlsx
    433.3 KB · Affichages: 34

patricktoulon

XLDnaute Barbatruc
re
Si je te parle de ton post #87 avec ton code.
Le dernier code que tu as publié m'inverse le mois et le jour
non!!non!!non!!!! je viens de vérifier

@Staple1600 on s'en fou de ca j'importe tout moi aussi au depart
ce que je veux dir c'est le collage des données ne se font pas verticalement
même si la destination est bien A rows.count end(xlup).offset(1)
je l'avais déjà remarqué parmi les moult détails qui me plaisent pas avec querytable(sur .txt)
 

thunder23

XLDnaute Occasionnel
re

non!!non!!non!!!! je viens de vérifier

@Staple1600 on s'en fou de ca j'importe tout moi aussi au depart
ce que je veux dir c'est le collage des données ne se font pas verticalement
même si la destination est bien A rows.count end(xlup).offset(1)
je l'avais déjà remarqué parmi les moult détails qui me plaisent pas avec querytable(sur .txt)

Je viens de tester sur un nouveau classeur avec ton dernier code, regarde ;)
 

Pièces jointes

  • Classeur2.xlsm
    332.7 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
thunder23
heu je crois que t'est perdu la
c'est une macro querytable c'est pas ma next version clipboard
c'est ca ma next version
VB:
Sub test()
    Dim tout As String, x$, fichier As String, tbl, colonnes
    Application.ScreenUpdating = False
    fichier = "C:\Users\polux\DeskTop\bdd.txt"
    fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt", 1, "ouvrir un fichier")
    If fichier = "" Then Exit Sub
    x = InputBox("tapez les numero de colonnes séparée par une virgule", "liste des colonnes")
    If x <> "" Then colonnes = Split(x, ",")
    x = FreeFile: Open fichier For Binary Access Read As #x: tout = String(LOF(x), " "): Get #x, , tout: Close #x
    For i = 20 To Right(Year(Date) + 1, 2): tout = Replace(tout, "/" & i, "/20" & i): Next
    With CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText tout: .PutInClipboard: End With
    With Sheets(1).Cells(1, 1) 'Cells(Rows.Count, 1).End(xlUp).Offset(1)
        .Parent.Activate
        .CurrentRegion.Clear
        .EntireColumn.NumberFormat = "mm/dd/yyyy"
        .Select
        ActiveSheet.Paste
        DoEvents
        tbl = Application.Index(.CurrentRegion.Value, Evaluate("ROW(" & 1 & ":" & .CurrentRegion.Rows.Count & ")"), colonnes)
        .CurrentRegion.ClearContents
        .EntireColumn.NumberFormat = "m/d/yyyy"
        .Resize(UBound(tbl), UBound(tbl, 2)) = tbl
     .EntireColumn.NumberFormat = "dd/mm/yyyy"
     .EntireColumn.HorizontalAlignment = xlRight
     End With
 End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Donc je me réponds à moi-même
(bravo l'émulation entre xldnautes... :rolleyes:)
VB:
Sub Macro1_Cinquo()
Dim typeCol, Chemin$
Application.ScreenUpdating = False
Chemin = "C:\Users\STAPLE\bdd\bdd.txt"
typeCol = Array(4, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Chemin, Destination:=Cells(Rows.Count, 1).End(3)(2))
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePlatform = 850
        .TextFileStartRow = 4
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = typeCol
        .TextFileDecimalSeparator = "."
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
        .Delete
    End With
End Sub
Et j'ai donc ma réponse sur xlSkipColumn
:rolleyes:
 

thunder23

XLDnaute Occasionnel
Staple1600,

si c'est à moi que tu me parlais je t'ai répondu au #105 ;)
Ce n'est qu'après la colonne N que les fichiers txt diffèrent d'une bdd à une autre car certains ont une station avec extension et d'autre non. ;)
Voilà le format donc ton Array est bon pour le chiffre 4 ;)
xlDMYFormat4Format de date JMA.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Je parle juste de xlSkipColumn depuis un petit bout.
Mais c'est pas grave, j'ai ma réponse en faisant le test-moi même.
(C'est ce que j'appelle la non-émulation entre participants d'un fil)

Et si tu ne sais pas à l'avance quelles colonnes seront ignorées, je ne vois pas comment automatiser la chose...
 

thunder23

XLDnaute Occasionnel
Re,

Oui je viens juste de modifier mon post #118 (ça en fera un en moins)
Ben pourquoi c'est possible avec le code de patricktoulon avec une inputbox ?

VB:
x = InputBox("tapez les numero de colonnes séparée par une virgule", "liste des colonnes")
    If x <> "" Then colonnes = Split(x, ",")
    x = FreeFile: Open fichier For Binary Access Read As #x: tout = String(LOF(x), " "): Get #x, , tout: Close #x
 

Discussions similaires

Réponses
10
Affichages
366

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote