Résolu 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.
 

Fichiers joints

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 Accro
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
demo3.gif
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 Accro
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.
 

Fichiers joints

patricktoulon

XLDnaute Accro
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.
 

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