XL 2016 [Macro] Copier des valeurs depuis un fichier texte au format "text"

DylanR

XLDnaute Nouveau
Bien le bonjour,

Il m'est demandé pour mon stage de traiter des données Hexadécimales d'un fichier texte avec Excel.
Il faut pour cela que ce soit le plus user-friendly, malheureusement je n'arrive pas à bien récupérer les valeurs de mon fichier texte au format Text à l'aide de macro (en ouvrant le fichier depuis excel il est facile de choisir le format de chaque colonne, mais c'est trop long d'ouvrir, de choisir, de copier les valeurs dans mon fichier excel).
Je vais par exemple avoir la valeur 2e00 qui est interprété comme 2e+02 ce qui n'a rien à voir...
Je souhaiterais donc au moment de la copie des valeurs depuis mon fichier .txt être au format Text sans qu'il ne change.

En pièce jointe le fameux fichier texte.

Et ici ma macro :

Code:
Sub Copie()

    Dim Fichier

    Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
    Worksheets("TestPression").Range("A3:H3").EntireColumn.ClearContents
    Worksheets("TestPression").Range("A3:H3").EntireColumn.NumberFormat = "@" 'Je pensais que ça marcherait
    Cells(1, 1).Value = "Valeurs copiées du fichier .txt"

    If Fichier <> False Then

        With Worksheets("TestPression").QueryTables.Add("TEXT;" & Fichier, [A3])
        '.NumberFormat = "@"  Je pensais que ça marcherait
        .Refresh
        .FieldNames = True
        .PreserveFormatting = True
        .SaveData = True
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
        End With
   
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End Sub
[Résolu]
Code:
Sub Ouvrir()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Workbooks.OpenText Filename:="C:\Users\Dylan\Desktop\Test\data.txt", _
    DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), _
    Array(6, 2), Array(7, 2), Array(8, 2))

Workbooks("data.txt").Worksheets("data").Range("A1:H1").EntireColumn.Copy _
    Workbooks("TestPression2.xlsm").Worksheets("TestPression").Range("A3:H3").EntireColumn

Workbooks("data.txt").Close False

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub
 

Fichiers joints

Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@DylanR [Bienvenue sur le forum]
Un retour de ta part un plus éloquent n'aurait pas été de trop... :rolleyes:
Apparemment ta question est résolue (c'est ce que semble dire ton édition du 2/7/18 à 15:06)
Oui mais résolu comment ?

Le préciser avec plus de détails pourrait intéresser des xldnautes qui tomberaient sur ton fil.

Donc comme j'ai fait quelques tests (avant de voir ce mot [résolu] perdu entre tes deux macros), je poste ici mes modifs de ta macro Copie qui semble importer au format texte (en tout cas, c'est le cas avec XL2013)

La macro modifiée donc
VB:
Sub Copie_BIS()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Worksheets("TestPression")
.Columns("A:H").Clear
.[A1] = "Valeurs copiées du fichier .txt"
    If Fichier <> False Then
    With .QueryTables.Add("TEXT;" & Fichier, .[A3])
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSpaceDelimiter = True 'Dans ton fichier texte, le séparateur c'est l'espace, non ?
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2) '2=xlTextFormat
        .Refresh BackgroundQuery:=False
        End With
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End With
End Sub
 

DylanR

XLDnaute Nouveau
Bonjour le fil, le forum

@DylanR [Bienvenue sur le forum]
Un retour de ta part un plus éloquent n'aurait pas été de trop... :rolleyes:
Apparemment ta question est résolue (c'est ce que semble dire ton édition du 2/7/18 à 15:06)
Oui mais résolu comment ?

Le préciser avec plus de détails pourrait intéresser des xldnautes qui tomberaient sur ton fil.

Donc comme j'ai fait quelques tests (avant de voir ce mot [résolu] perdu entre tes deux macros), je poste ici mes modifs de ta macro Copie qui semble importer au format texte (en tout cas, c'est le cas avec XL2013)

La macro modifiée donc
VB:
Sub Copie_BIS()
Dim Fichier
Fichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Worksheets("TestPression")
.Columns("A:H").Clear
.[A1] = "Valeurs copiées du fichier .txt"
    If Fichier <> False Then
    With .QueryTables.Add("TEXT;" & Fichier, .[A3])
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileSpaceDelimiter = True 'Dans ton fichier texte, le séparateur c'est l'espace, non ?
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2) '2=xlTextFormat
        .Refresh BackgroundQuery:=False
        End With
    Else
        MsgBox "Il faut choisir un fichier texte"
    End If
End With
End Sub
Bonjour,

J'étais assez frustré de ne recevoir aucune réponse de la part du forum et de devoir donner une solution qualitative si l'on puit dire.
J'en ai donc convenu que ma réponse suffisait amplement pour d'autres internautes.
Je suis passé directement par le traitement de données sur un fichier excel ouvert avec le contenu de mon fichier texte dans chaque cellule.

VB:
'J'ouvre mon fichier texte en définissant chaque colonne au format texte séparé par un espace
Workbooks.OpenText Filename:="C:\Users\Dylan\Desktop\Test\data.txt", _
    DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), _
    Array(6, 2), Array(7, 2), Array(8, 2))

'Je copie toutes les colonnes de ce nouveau classeur excel ouvert contenant les données dans mon classeur qui traitera celles-ci
Workbooks("data.txt").Worksheets("data").Range("A1:H1").EntireColumn.Copy _
    Workbooks("TestPression2.xlsm").Worksheets("TestPression").Range("A3:H3").EntireColumn

'Je ferme ensuite mon classeur, dans mon cas je ne vois pas l'ouverture et la fermeture du classeur dû à la vitesse ce qui me convient parfaitement
Workbooks("data.txt").Close False
J’espère que cela suffira,

Bien à vous
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, DylanR

@DylanR
1) C'est au demandeur de relancer son post, quand les réponses tardent à venir
(en faisant un up => c'est à dire se répondre à soi-même pour que sa discussion s'affiche en tête de liste)

2) Vu que tu avais marqué [résolu] dans ton premier post (à peine deux heures après avoir posé ta question :rolleyes:), c'est normal que les réponses ne fusent pas, non ?

3) As-tu au moins essayé ma version corrigée de ta macro?
Si non, dans ce cas, c'est moi qui devrait voir poindre en moi un sentiment de frustration, non ?

Pour finir, une dernière remarque ;)
(extrait de la charte du forum ci-dessous)
2 – Tous les membres du forum répondent gracieusement aux questions.
Il n’y a donc aucune obligation de résultat et de délai.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas