Extraire chaine de caractères

Bonjour à tous,

Je suis webdesigner et j'ai un soucis avec un fichier json/base de données.

Le json que j'ai ouvert dans excel, se construit comme ce qui suit:

[{"name":"AB","address":{"street":"4","zipcode":"65896","city":"Paris"}},

{"name":"BC","address":{"street":"7","zipcode":"89741","city":"New York"}},

{"name":"SP","address":{"street":"8","zipcode":"1217","city":"Hilversum"}},

Et je voudrais pouvoir conserver seulement

AB

BC

SP

Alors je ne sais pas si le mieux c'est d'extraire ou de supprimer le reste des données...

En espérant que vous ayez une solution à mon problème. Peut être qu'il est aussi possible de le faire dans word, ou autre logiciel...

je suis perdu

Pour info, cette data je pourrais l'intégrer dans mes designs à la place du "lorem ipsum"

Merci infiniment.

Alex

Bonjour,

Quand vous l'ouvrez sur Excel, les données sont dans une seule case ou sur plusieurs lignes?

Si les données sont sur plusieurs lignes, vous pouvez utiliser cette formule :

=STXT(A1;CHERCHE(":";A1)+2;2)

Cindy

Merci de votre réponse.

Une seule ligne/case (A1) oui, sans espace.

Donc la formule marche?

Cindy

Non la formule ne fonctionne pas.

Enfait quand jai mis AB c'est aussi un code pour une chaine de caractère qui varie. Je l'ai changé par confidentialité.

Le code pourrait aussi se construire comme ca:

[{"name":"efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},

{"name":"poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},

{"name":"nnkg","address":{"street":"8","zipcode":"1217","city":"Hilversum"}},

Le code m'a retourné dans ce cas précis: ef

Soit juste les deux première lettre du premier code name

Merci encore de l'aide

Bonsoir Alex, le forum,

eh oui, voilà c'qui arrive quand on donne un exemple pas assez représentatif du cas réel !

avec ton exemple (trop simplifié), on pense que le nom est toujours de 2 lettres majuscules.

selon tes nouvelles infos, je te propose ce fichier Excel :

merci de me dire si ça te convient.

dhany

Bonjour alexandrek , Dhany, CindyD

Une autre méthode : utiliser MSScriptControl.ScriptControl avec JScript comme langage et d'évaluer le json.

    Dim oScriptEngine As Object
    Set oScriptEngine = CreateObject("MSScriptControl.ScriptControl")
    oScriptEngine.Language = "JScript"
    Dim jsonString As String
    jsonString = "______________ici le json________________"
    Dim objJSON As Object
    Set objJSON = oScriptEngine.Eval("(" + jsonString + ")")

Malheureusement ton json est incomplet car il annonce un tableau array par [ ... mais sans fermer !

On aurait pu sinon essayer un VBA.CallByName(objJSON, "name", VbGet)

... suite du message précédent ...

Une seule ligne/case (A1) oui, sans espace.

Mais effet, comme le préconisent CindyD et Dhany, on peut tout simplement travailler sur la chaîne de caractères.

Si tout est dans une seule cellule, on peut appliquer les expressions régulières ...

Merci à tous pour vos réponses.

Oui dhany, je vois qu'il faut faire attention au détail !

Par contre pour ton code, alors oui il me sort le 1er "name" en entier, par contre comme tout est dans la case A1, il ne me sort donc pas les autres. Alors peut être qu'il y aurait un code intermédiaire qui permettrait de détecter chaque "name" et de les placer sur différentes cases.

En clair, pour l'instant j'ai:

A1:

[{"name":"efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},{"name":"poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},{"name":"nnkg","address":{"street":"8","zipcode":"1217","city":"Hilversum"}},............................................................................. .....................

Et pour répondre à Steelson, oui ! il y a bien une fin que j'ai manqué de mentionner (le code est long) encorde dsl dhany

....................................................................{"name":"Music","address":{"street":"171 bis avenue,"zipcode":"89200","city":"Borda"}}]

Alors dhany, ton code fonctionnerai si j'avais ce tableau:

A1:

[{"name":"efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},

A2:

{"name":"poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},

An+1: ...

Steelson, j'ai bien mon json complet. Par contre je ne comprend où placé ton code.

Le resutat du json & regexp.xlsm ->voir pièce jointe.

Merci encore

capture d ecran 2019 01 16 a 11 39 04

As-tu activé le macros ? j'ai une fonction personnalisée en VBA

Avec activation des macros

capture d ecran 384

Oui j'ai essayé en activant et en désactivant les macros.

Petite video de démonstration.

https://youtu.be/K1BXSuo0p90

ok tu es sous mac ... la macro est spécifique microsoft (et terriblement efficace !)

désolé

Cette version devrait fonctionner sous mac

Sub noms()
tbl = Split(Range("A1").Value, """name"":""")
For i = 1 To UBound(tbl)
    Cells(i + 1, 1) = Split(tbl(i), """")(0)
Next
End Sub

Du pure génie !

merci beaucoup ça fonctionne!

J'aimerais essayer de comprendre comment tu as fais, tu pourrais m'expliquer ton code et comment j'y accède sur la page Excel?

Pour accéder au code : Alt + F11

Explications ...

split découpe une chaîne de caractères selon un critère (séparateur) et place chaque élément dans un tableau ;

le critère est ici "name":", il faut doubler les guillemets car cela fait partie d'un string défini par ="_________"

ensuite, je reprends chaque terme du tableau sauf le premier (indice 0) qui n'a pas d'intérêt car se trouve du début de la chaîne au premier séparateur

je redécoupe chaque terme selon ", doublé aussi car se trouve entre "____", et cette fois-ci je prends le premier (indice 0) du sous-tableau ainsi créé par split

Merci pour ces explications.

J'ai essayé de les completer avec des recherches sur internet, mais j'ai pas trop réussi à comprendre

Dernières petites questions après je t'embête plus.

Tu m'as dit que le critère est "name":", si je double les guillemets ca devrait donner """name":"""

Pourquoi avoir mis deux "" entre name et :

Si je comprend bien la 1er découpe décompose mon A1 par:

[{ = indice 0

"name":"efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},{ = indice 1 ?

"name":"poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},{ = indice 2 ?

Puis redecompose par " ce qui donne

"name" position ?

"efizejpoijfi" position 0 ou 1 ?

Voila j'ai compris un peu dans l'ensemble mais je bloque sur le detail.

J'aimerais pouvoir le refaire moi même pour extraire juste les codes postaux par exemple.

[quote=alexandrek post_id=726157 time=1547807162 user_id=60310]

Si je comprend bien la 1er découpe décompose mon A1 par:

[{ = indice 0

"name":"efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},{ = indice 1 ?

"name":"poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},{ = indice 2 ?

[/quote]

OUI, mais pas tout à fait, le séparateur disparaît donc :

indice 1 : efizejpoijfi","address":{"street":"4","zipcode":"65896","city":"Paris"}},{

indice 2 : poindji","address":{"street":"7","zipcode":"89741","city":"New York"}},{

Puis redecompose par " ce qui donne

"name" position ?

"efizejpoijfi" position 0 ou 1 ?

position 0 car le premier tronçon du découpage, la partie avant le séparateur ", et sans les guillemets qui font partie du séparateur

Tu m'as dit que le critère est "name":", si je double les guillemets ca devrait donner """name":"""

Presque ...
"""name"":"""

je double tous les guillemets donc ""name"":"" et ensuite j'encadre avec "________"

En réalité, d'habitude, je procède autrement et c'est plus simple

je mets dans une cellule "name":" et dans une autre " que je nomme avant et apres

avec mise dans le fichier des séparateurs

Rechercher des sujets similaires à "extraire chaine caracteres"