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
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.
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 IfAussi, 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 ThenJe 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 SubA+
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