XL 2019 Import fichier ".txt" avec des caractères cachés qui gênent l'import

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 !

Titof06

XLDnaute Occasionnel
Bonjour à Toutes et Tous,

Je reviens vers vous pour un problème lors d'un import d'un fichier ".txt".

Je vous joins le fichier Excel et ".txt".

Lors de l'import avec la macro, je me trouve avec un problème sur les lignes 10, 14 à 30.

on peut voir qu'il doit y avoir un caractère qui m'empêche de faire une importation propre, comme pour le lignes 1 à 9.

Est-ce que quelqu'un aurait une solution pour moi, svp.

Je vous remercie pour le temps que vous allez passer et vous souhaite une agréable fin de journée,

Titof06
 

Pièces jointes

Bonjour Titof06,

Pour une raison que j'ignore la macro n'a pas converti les textes restitués dans les cellules U10 et U14:U30, ils contiennent toujours les tabulations.

Sur ces cellules on peut appliquer la commande Convertir : elle fonctionne sans problème.

A+
 
Bonjour,
notes que le séparateur par tabulation est exactement ce qu'attend Excel en copier coller!
VB:
Sub test()
    ' Lit le fichier texte et place son contenu dans le presse-papier
    PressePapier = LireFichierTxt(ThisWorkbook.Path & "\Articles_Extraction_Parametrees_POUR TEST.txt")
  
    ' Colle le contenu du presse-papier dans la cellule A1 de la feuille "Source"
    Sheets("Source").Range("A1").PasteSpecial xlPasteAll
  
    ' Vide le presse-papier
    ClearPressePapier
End Sub

Function LireFichierTxt(cheminFichier As String) As String
    Dim numeroFichier As Integer  ' Numéro de fichier unique pour l'opération
    Dim contenu As String         ' Variable pour stocker le contenu du fichier
  
    ' Obtient un numéro de fichier libre
    numeroFichier = FreeFile
  
    ' Ouvre le fichier en mode lecture
    Open cheminFichier For Input As #numeroFichier
  
    ' Lit tout le contenu du fichier en une seule fois (LOF = Length Of File)
    contenu = Input$(LOF(numeroFichier), numeroFichier)
  
    ' Ferme le fichier
    Close #numeroFichier
  
    ' Retourne le contenu lu
    LireFichierTxt = contenu
End Function

Public Function ClearPressePapier()
    ' Efface le contenu texte du presse-papier Windows
    CreateObject("htmlfile").parentwindow.clipboardData.clearData "Text"
End Function

Public Property Let PressePapier(valeur)
    ' Définit le contenu texte du presse-papier Windows
    CreateObject("htmlfile").parentwindow.clipboardData.SetData "Text", valeur
End Property

Public Property Get PressePapier()
    ' Récupère le contenu texte du presse-papier Windows
    PressePapier = CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT")
End Property
 
Dernière édition:
Bonsoir,
Sinon, avec Power Query (avec transformation en nombre décimal des colonnes concernées)

PowerQuery:
let
    Source = Csv.Document(File.Contents("D:\doc\Excel\exemples\PQ\csv\Articles_Extraction_Parametrees_POUR TEST.txt"),[Delimiter="#(tab)", Columns=32, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"En-têtes promus" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Type modifié" = Table.TransformColumnTypes(#"En-têtes promus",{{"Remise 1 conv.", type number}, {"Remise 2 conv.", type number}, {"Remise 3 conv.", type number}, {"Remise 4 conv.", type number}, {"Remise 5 conv.", type number}, {"Prix Achat Brut", type number}, {"Prix Public HT", type number}, {"Taux de Marque", type number}})
in
    #"Type modifié"

Bonne soirée
 
coucou
A tout hasard
une solution pour supprimer les tab et plus si affinité

Sub ouv()
fces = "Articles_Extraction_Parametrees_POUR TEST.txt"
fic_ori = ThisWorkbook.Name
rep = ThisWorkbook.Path & "\"
fichier = rep & fces

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(fichier)
Set fich = f.OpenAsTextStream(1)
texte = fich.readall
t = Replace(texte, Chr(9), "")

MsgBox t
End Sub
 
Bon j'ai eu du mal mais j'ai trouvé la raison du mauvais affichage des lignes 10 et 14 à 30.

Sur ces lignes il y a des guillemets ouvrants "" en colonne U devant ADAPTATEUR mais pas de guillemets fermants.

Ces guillemets ne servent à rien, je les ai tous supprimés dans le fichier texte avec la commande Remplacer du menu Modifier du Bloc-notes.

Maintenant la macro s'exécute correctement.
 

Pièces jointes

Bon j'ai eu du mal mais j'ai trouvé la raison du mauvais affichage des lignes 10 et 14 à 30.

Sur ces lignes il y a des guillemets ouvrants "" en colonne U devant ADAPTATEUR mais pas de guillemets fermants.

Ces guillemets ne servent à rien, je les ai tous supprimés dans le fichier texte avec la commande Remplacer du menu Modifier du Bloc-notes.

Maintenant la macro s'exécute correctement.
Hi,
Je cherchais (vainement), la solution dans le fichier Excel.... (les codes VBA se ressemblant furieusement....)
Il faut donc modifier le fichier origine, avant de le traiter?
Quel intérêt?
 
Ah oui mais entre les guillemets il y avait le caractère "|" qui est utilisé comme séparateur et qui était donc neutralisé.

En supprimant les guillemets ce séparateur fonctionne et ça ne va pas du tout.

Dans le fichier texte joint j'ai donc remis les guillemets mais cette fois en les fermant sur les lignes 10 et 14 à 30.
 

Pièces jointes

Hello,

on peut voir qu'il doit y avoir un caractère qui m'empêche de faire une importation propre, comme pour le lignes 1 à 9.
Tout à fait, mais tu noteras (peut-être l'as-tu déjà fait) qu'en modifiant deux paramètres, l'importation se fait correctement et on obtient les données telles qu'elles existent réellement dans le fichier.
TextQualifier:=xlTextQualifierNone
Other:=False

VB:
Sub Ouvrir()
' Ouvrir un fichier ".txt" en formatant les colonnes

    fces = "Articles_Extraction_Parametrees_POUR TEST.txt"
    fic_ori = ThisWorkbook.Name
    rep = ThisWorkbook.Path & "\"
    Sheets("Source").Range("A1").Select

    ' Le formatage des Colonnes se fait avec la fonction "Array(1 ,x)
    '   1 = Le numéro de la Colonnes
    '   x = représente Le Type de Formatage, voir ci-dessous
    '       1 = Général
    '       2 = Texte
    '       3 = Date au format MDY
    '       4 = Date au format DMY
    '       5 = Date au format YMD
    '       6 = Date au format MYD
    '       7 = Date au format DYM
    '       8 = Date au format YDM
    '       9 = Colonne Pas Analysée
    '      10 = Date au format EMD
    Workbooks.OpenText Filename:=rep & fces, _
                       Origin:=xlWindows, _
                       StartRow:=1, _
                       DataType:=xlDelimited, _
                       TextQualifier:=xlTextQualifierNone, _
                       ConsecutiveDelimiter:=False, _
                       Tab:=True, _
                       Semicolon:=False, _
                       Comma:=False, _
                       Space:=False, _
                       Other:=False, _
                       OtherChar:="|", _
                       FieldInfo:=Array(Array(1, 1), Array(2, 2), Array(3, 2), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
                                        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
                                        Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), _
                                        Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1)), _
                       DecimalSeparator:=".", _
                       TrailingMinusNumbers:=True

End Sub
 
Dernière édition:
@TooFatBoy : apparemment tu n'as pas lu mes posts #6 et #8.

Ils disent clairement que dans le fichier texte il manquait des guillemets fermants sur les textes destinés à la colonne U.
Oui, en effet, tu le dis clairement. Mais qu'aurais-je dû en déduire ?


En fait, en analysant le fichier .txt on voit qu'il manque les guillemets fermants quand la donnée dépasse les 161 caractères.
(je dis 161 de mémoire défaillante, donc c'est à vérifier)
 
Ben ce que j'en ai déduit, c'est à dire qu'il fallait ajouter les guillemets manquants dans le fichier texte.
Ah ben non, ma déduction n'a pas été la même que la tienne.

Visiblement tu n'as pas lu mon message de #9, dans lequel je précise bien (et je l'ai même souligné) que ça restitue les données telles qu'elles existent réellement dans le fichier, donc sans les bidouiller en ajoutant ou enlevant des caractères. 😉
 
Bonjour le forum,

En effet il n'est pas logique de modifier manuellement le fichier source comme je l'ai fait.

Mais il n'est pas non plus logique de laisser des guillemets dans les textes importés comme le fait TooFatBoy.

Voici une solution avec ouverture en lecture séquentielle qui permet de supprimer tous les guillemets :
VB:
Sub Ouvrir()
Dim fichier, texte$, a(), n&
fichier = ThisWorkbook.Path & "\Articles_Extraction_Parametrees_POUR TEST.txt"
Open fichier For Input As #1 'ouverture en lecture séquentielle
While Not EOF(1)
    Line Input #1, texte
    texte = Replace(texte, """", "") 'supprime les guillemets
    ReDim Preserve a(n): a(n) = texte: n = n + 1
Wend
Close #1
Application.ScreenUpdating = False
Cells.ClearContents 'RAZ
With [A1].Resize(n)
    .Value = Application.Transpose(a) 'Transpose est limitée à 65536 lignes
    .TextToColumns .Cells, xlDelimited, Tab:=True, Other:=False, DecimalSeparator:="." 'commande Convertir
End With
End Sub
A+
 

Pièces jointes

Mais il n'est pas non plus logique de laisser des guillemets dans les textes importés comme le fait TooFatBoy.
Pour moi il est logique de restituer les données telles qu'elles sont.

Ceci dit, si tu tiens absolument à les modifier, je me demande s'il ne faudrait pas simplement supprimer le premier caractère et supprimer le dernier caractère uniquement si c'est un guillemet.
Ça éviterait de supprimer d'éventuels guillemets à l'intérieur de la chaîne de caractères.
 
- 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

Réponses
1
Affichages
619
Retour