Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb de modification du contenu de cellule lors d'une ouverture d'un fichier .txt en VBA

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
Je viens vers vous car je rencontre un problème lors de l'ouverture d'un fichier "txt" par macro.
En fait mon problème est une transformation du contenu du fichier "txt" lors de la copie dans une cellule. Par exemple si dans le fichier "txt" j'ai une valeur du style "°" après le passage vers le fichier xlsm, je me retrouve avec ce style de valeur "°"
Je vous joint un exemple de fichier texte avec différentes valeurs de la ligne "unit" avec par exemple la valeur "unit": "°C/s", et ainsi de suite. Même genre de problème avec la valeur "unit": "mm/s²" et l'exposant 2, ou les mm3 pour millimètres cube le 3 étant en exposant.
De plus je joins mon fichier xlsm et la macro que j'utilise.
J'avoue humblement que je ne comprends pas ce qui se passe.

A ce que j'ai pu comprendre avec "Workbooks.OpenText Filename:" Excel créé un classeur temporaire à partir duquel je copie les données dans mon classeur de départ.

Il semble que c'est durant cette opération de "Workbooks.OpenText Filename" que les valeurs sont "transformées".

Existe -t-il une âme charitable qui pourrait m'aider à résoudre mon problème.
Je reste à votre disposition si vous avez des questions complémentaires.
Dans l'attente de vos réponses je vous souhaite à toutes et tous une bonne journée.
 

Pièces jointes

  • Jeff-05-11.txt
    5.9 KB · Affichages: 8
  • Mise en forme import.xlsm
    19.9 KB · Affichages: 7

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Une piste:
  • On ouvre le fichier texte dans le bloc-note
  • on re-sauvegarde (enregistrer sous) le fichier sur lui-même mais avec l'encodage ANSI (option de la boite de dialogue)
  • l'ouverture du fichier dans Excel devrait bien se passer.
VB:
    Workbooks.OpenText Filename:= _
        "C:\Chemin\Jeff-05-11-ANSI.txt", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
        , Space:=False, Other:=False, OtherChar:=":", FieldInfo:=Array(Array(1, _
        1), Array(2, 1)), TrailingMinusNumbers:=True

Bon après, il faut automatiser la conversion ANSI
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour jeff
en fait c'est un json ton fichier
je t'aurais bien proposer un code avec un object script control mais relever pas moins de 27 erreurs (segment non fermés)
pas moins de 17 manquants
pour un json de 8 groupeElmements c'est un peu beaucoup quand même
donc j'ai bien un autre moyen mais il faut que je connaisse les entêtes de colonnes que tu veux et dans l'ordre que tu veux

car texttocolumn va te faire un tableau complètement mélangé et tu retrouvera pas l'organisation qui a été tenté dans ce JSON
j'ai essayé de l'organiser est ca ben ca

si tu me donne les entêtes de colonne je peux te faire un truc
 

jeff1494

XLDnaute Occasionnel
Bonsoir à toutes et tous;

PatrickToulon : Merci pour ta réponse. En fait ce que j'ai transmis n'est qu'un exemple de fichier, alors très certainement la structure d'un fichier json n'est pas respecté, toutes mes excuses. Ce que je veux comme résultat final, n'est pas des colonnes, mais de tout garder dans la colonne A. Je ne sais pas si c'est possible. Si tu as besoin d'autres informations dis le moi. Je peux poster le fichier json d'origine i besoin.

Mapomme : Merci pour cette piste. Je vais voir ce que je pourrais essayer pour automatiser cette conversion. Peut-être qu'une macro avec notepad++ serait-elle possible, mais je ne connais pas les macros de notepad++. Je vais voir ce qui se passe de ce côté.

Dans tous les cas un grand merci pour votre temps et vos suggestions.
Bonne soirée à toutes et tous.

PS : Mapomme, en effet ta solution fonctionne bien, ne me reste plus qu'à essayer d'automatiser cette "conversion'.
Pas sûr que cela soit facile, voire possible.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
ho!!! a ma grande surprise on onbtient les element indenté avec querytable pour les enfants et sub enfant de setting
c'est quoi ce style de JSON encore
bref

VB:
Sub test1()
    With ActiveSheet.QueryTables.Add(Connection:= _
                                     "TEXT;C:\Users\polux\DeskTop\Jeff-05-11 (1).txt", Destination:=Range("$A$1"))
        .Name = "Jeff-05-11 (1)"

        .Refresh BackgroundQuery:=False
        .Delete
    End With
    Cells.Replace What:="°", Replacement:="°", LookAt:=xlPart
    Cells.Replace What:="²", Replacement:="s²", LookAt:=xlPart
End Sub
 

jeff1494

XLDnaute Occasionnel
Patricktoulon;
Je pense qu'il vaut mieux utiliser le fichier d'origine plutôt que l'extrait que j'ai créé, car je n'ai rien respecté en terme de structure. Et j'ai bien peur que tu te prennes la tête pour pas grand chose, et cela de ma faute. Voici donc le fichier d'origine.
Désolé pour ma maladresse, et encore merci pour ton aide.
 

Pièces jointes

  • fdmprinter.def.zip
    44 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
re
ca marche aussi
VB:
Sub test1()
    With ActiveSheet.QueryTables.Add(Connection:= _
                                     "TEXT;C:\Users\polux\DeskTop\fdmprinter.def.json", Destination:=Range("$A$1"))
        .Name = "Jeff-05-11 (1)"

        .Refresh BackgroundQuery:=False
        .Delete
    End With
    Cells.Replace What:="°", Replacement:="°", LookAt:=xlPart
    Cells.Replace What:="²", Replacement:="s²", LookAt:=xlPart
End Sub
 

jeff1494

XLDnaute Occasionnel
Patricktoulon : Merci pour ta réponse, ne me reste plus qu'a identifier toutes les combinaisons, et comment marche le code que tu m'as écrit.
Encore désolé si j'ai perturbé ta réflexion avec mon ignorance concernant les fichiers json.
 

jeff1494

XLDnaute Occasionnel
mapomme;
En regardant ton message j'ai vu que tu avais modifié le paramètre Origin en le mettant à la valeur xlWindows.
J'ai essayer avec l'enregistreur de macros de voir les codes possibles et en fin de liste j'ai trouvé la valeur 65001 : Unicode (utf-8). J'ai testé et cela fonctionne apparemment correctement donc grâce à vous deux avec Patricktoulon, mon problème est résolu pour moi.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…