Récupération FIchier JSON

Bonjour,

J'ai pas mal cherché sur le net, sans jamais vraiment trouvé une solution a mon problème.

J'ai bien lu le post "Récupération Cote PMU", mais je n'arrive pas à l'adapter.

Et j'avoue ne pas forcement comprendre les différentes solutions (JSON COnverter, API, Token, etc...).

Donc ma demande est la suivante :

Je reçois par mail un fichier JSON correspondant à un devis fait sur un site internet

94example.json (950.00 Octets)

Ce fichier aura toujours les meme nom d'objets, ordonnés de la meme façon.

Seule la partie "détails", pourra être plus ou moins importantes.

Ce que j'aimerais, c'est pouvoir importer ce fichier dans un classeur Excel, et pouvoir identifier les objets pour les placer à des cellules spécifiques.

Dans les exemples que j'ai trouvé, cela faisais toujours référence à une URL, or moi je souhaite choisir le fichier à Parser.

espère avoir été clair

Bonsoir, ton fichier à l'air "foutu" car j'en converti pas mal avec un site en ligne et je viens d'essayer avec le tien et il me renvoie un message d'erreur.

The json file you are uploading is not in a valid json format.

Bonjour,

Il se peut que j'ai effacé par erreur un éléments pour des besoins de confidentialité.

J'avais trouvé ce site dont certains du forum font référence, mais je n'arrive pas à l'adapter à mon cas

Bonjour Rafu59,

Vu la structure du fichier, pour moi inutile de passer par une usine à gaz pour le traiter.

Il suffit de l'ouvrir comme un fichier presque normal

A+

Je sais qu'il est possible d'importer le fichier en données, mais j'aimerais l'automatiser par une macro.

En fait, j'ai fait un classeur d'Edition de Devis/Facture, pour le traitement des demandes clients.

Notre site internet nous génère aussi des devis au format PDF, que nous devons retaper dans le classeur Excel (Car nous avons toujours des informations à y insérer).

Notre site internet peut aussi générer l'envoi de fichier JSON, ou HTML a chaque demande.

Dans un soucis de gain de temps, et pour éviter le risque d'erreur, j'aimerais pouvoir obtenir les informations du fichier JSON.

Coller ces informations dans ma feuille "DEVIS", tout cela le plus simplement possible.

Mes équipes ne sont pas toutes calées en informatique

Re,

Voici le fichier avec le code à tester avec le fichier JSON donné

A+

Bonjour,
Une approche Power Query.
Voir requêtes et connexions.
Cdlt.

39rafus59.xlsx (17.22 Ko)

Merci BrunoM45, le fichier fonctionne parfaitement.

Mais du coup, pas besoin de module JSON Converter et autres ??!!

Peux tu m'expliquer ce bout de cote ?

If InStr(1, sVal, "name") > 0 Then
        sTmp = Replace(Mid(sVal, InStr(1, sVal, ":") + 2), Chr(34) & ",", "")
        ' Initialiser ici le numéro de la ligne à remplir
        nLig = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & nLig).Value = sTmp
      End If

Aussi, si j'ai besoin de récupérer des informations et les placer dans des cellules spécifique, par exemple le "FirstName" à coller en cellule H26, comment dois-je procéder ?

Re,

Dans ton cas, je pense qu'il n'y a pas besoin de passer par la moulinette JSON converter

If InStr(1, sVal, "name") > 0 Then

Je vérifie que dans la valeur récupérée de la celulle, j'ai le mot "name"

Dons il faut tester en amont pour les autres valeurs

Sinon on peut modifier le code par celui-ci pour supprimer tous les guillemets avant de commencer

Sub ImporterJson()
  Dim sPath As String, sFic As String
  Dim WbkJS As Workbook, ShtJS As Worksheet
  Dim dLig As Long, Lig As Long, nLig As Long
  Dim sVal As String, sTmp As String
  Dim FlgDétail As Boolean
  ' Initialiser les variables
  ' Définir le chemin et le nom du fichier ICI
  sPath = "P:\Mes Docs Excel\Forums\Excel-Pratique\"
  sFic = "example.json"
  FlgDétail = False
  ' Ouvrir le fichier
  Workbooks.OpenText Filename:=sPath & sFic, Origin:=xlWindows, _
      StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
      ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, _
      Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
  ' Définir le classeur
  Set WbkJS = ActiveWorkbook
  ' Définir la feuille source
  Set ShtJS = WbkJS.Sheets(1)
  ' Supprimer tous les guillemets
  ShtJS.Cells.Replace What:="""", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, _
    MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
  ' Dernière ligne de la feuille à traiter
  dLig = ShtJS.Range("A" & Rows.Count).End(xlUp).Row
  ThisWorkbook.Activate
  ' Avec la feuille de dstination
  With ThisWorkbook.Sheets("Feuil1")
    For Lig = 1 To dLig
      ' Récupérer valeur de la cellule
      sVal = ShtJS.Range("A" & Lig).Value
      ' Tester ce que l'on veut ICI

      ' Chercher la partie détail de la commande
      If InStr(1, sVal, "details") > 0 Then FlgDétail = True
      If FlgDétail = False Then GoTo SuiteLig
      ' Nom produit
      If InStr(1, sVal, "name") > 0 Then
        sTmp = Replace(Mid(sVal, InStr(1, sVal, ":") + 1), ",", "")
        ' Initialiser ici le numéro de la ligne à remplir
        nLig = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & nLig).Value = sTmp
      End If
      ' Quantité produit
      If InStr(1, sVal, "qte") > 0 Then
        sTmp = Mid(sVal, InStr(1, sVal, ":") + 1)
        .Range("B" & nLig).Value = CInt(sTmp)
      End If
      ' Prix unitaire produit
      If InStr(1, sVal, "unit_price") > 0 Then
        sTmp = Mid(sVal, InStr(1, sVal, ":") + 1)
        .Range("C" & nLig).Value = CDbl(sTmp)
      End If
      ' Complément
      If InStr(1, sVal, "complement") > 0 Then
        sTmp = Mid(sVal, InStr(1, sVal, ":") + 1)
        .Range("D" & nLig).Value = sTmp
      End If
SuiteLig:
    Next Lig
  End With
End Sub

A+

Re,
@rafu59,
Un petit retour sur la proposition (approche) Power Query ?
Pour la suite, un petit fichier Excel pour restituer des données dans une feuille de calcul ?
Dans l'attente de te lire.
Cdlt.

Salut Jean Eric,

Je n'ai pas réussi a faire fonctionner ton fichier

Rechercher des sujets similaires à "recuperation fichier json"