Retour d'API dans une cellule Excel

Bonjour,

J'ai un tableau avec des adresses et je souhaiterais pouvoir exploiter l'API de la BD adresse pour récupérer automatiquement la valeur X et Y par le biais d'une requête curl :

  curl "https://api-adresse.data.***/search/?q=1+rue+des+vignerons&postcode=68750" | jq '.features[0] .properties .x'

r

  curl "https://api-adresse.data.***/search/?q=1+rue+des+vignerons&postcode=68750" | jq '.features[0] .properties .y'

Est-il possible d'executer curl dans excel ?

Bonjour,

J'utilise l'API de la bd adresse pour géolocaliser des adresses saisies par des collègues. Je souhaite, lorsque la colonne adresse (B) est saisie que cela déclenche la commande curl qui récupère la valeur x et l'insère dans ma colonne (F)

intégrer la réponse de ma commande au sein de ma cellule.

Est-ce-qu'il est possible d'exploiter CURL au sein d'excel ? Si oui est-ce que vous auriez un exemple ?

Au plaisir de vous lire

bonjour,

il est possible d'exécuter une macro excel pour démarrer la commande curl à partir d'excel, la commande s'exécutera dans une fenêtre de commande DOS, probablement que le résultat de cette commande peut-être mis dans un fichier, ensuite la macro excel devra lire ce fichier et en extraire le résultat pour le présenter comme souhaité.

impossible d'en dire/faire plus sans une possibilité de tester pour ton cas précis.

Merci oui cependant je préfère ne pas passer par de script externe .

Je pense filtre la réponse de l'API en VBA (que ne connais pas du tout ) Cependant j'ai une erreur #valeurs dans excel (je pense que ca vient du test de paramètres car ça fonctionne individuellement

Function getcoordinate(ByVal pURL As String, ByVal typCoord As String) As String
    Dim oRequest As Object
    Dim result As String

    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    oRequest.Open "GET", pURL
    oRequest.Send
    repAPI = oRequest.responseText
    decomp = Split(repAPI, ",")                 'decompose la reponse API selon les virgules

    If LCase(typCoord) = "x" Then                             'si param =x alors retourne latitude
        extractC = CStr(decomp(4))                             'chaine contenant x
        result = Mid(extractC, 18)
    ElseIf LCase(typCoord) = "y" Then                       'si param =y alors retourne longitude
          chaine = CStr(decomp(5))                               'chaine contenant y
          result = Replace(chaine, "]}", "")
    Else
        result = "DEF ARGUMENT"
    End If
  getcoordinate = result
End Function

Bonsoir,

le code semble correct, donc l'erreur vient d'une mauvaise interaction entre les données et la macro. et donc on a besoin du contexte pour pouvoir aider. quelles sont les valeurs des paramètres passés à cette fonction ? pURL et typCoord

Bonjour à tous,

si tu as une version récente d'excel :

=SERVICEWEB("https://api-adresse.data.gouv.fr/search/?q=1+rue+des+vignerons&postcode=68750")

dans une cellule te retourne tout.

Plus qu'à récupérer ce qui suit "x":

Mais tu es sûr que x c'est la latitude ?

Latitude et longitude ont plutôt l'air d'être dans coordinates

eric

soin d

Merci pour les réponses.

Alors pURL actuellement correspond à la cellule ou figure 'https://api-adresse.data.***/search/?q=1+rue+des+vignerons&postcode=68750"

mais ce paramètre fonctionne sans souci quand j'exécute la fonction avec un seul paramètre et sans IF.

et le paramètre typCoord est supposé acceuillir une lettre (x ou y) pour définir ce que l'on souhaite générer (et je pense que le problème vient de là).

Je fais juste des tests (jamais touché à vba ^^), le résultat final sera différent les 3 premiers paramètres seront le numéro, la rue, et le CP. L'url de l'API sera stockée dans la fonction.

Bonjour,

comme tu ne veux pas donner l'url complète, j'ai testé avec l'url que Eriiic a utilisée

voici une correction

Function getcoordinate(ByVal pURL As String, ByVal typCoord As String) As String
    Dim oRequest As Object
    Dim result As String

    Set oRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    oRequest.Open "GET", pURL
    oRequest.Send
    repAPI = oRequest.responseText
    decomp = Split(repAPI, " ")                 'decompose la reponse API selon les blancs
    searchstring = Chr(34) & typCoord & Chr(34) & ":" 'chaine à rechercher "x": ou "y":
    result = "DEF ARGUMENT"
    For i = LBound(decomp) To UBound(decomp)
        If decomp(i) = searchstring Then 'chaine trouvée
            result = Left(decomp(i + 1), Len(decomp(i + 1)) - 1) 'le résultat est dans le bloc suivant.
            Exit For
        End If
    Next i
  getcoordinate = result
End Function

Hum c'est surtout que je peux pas poster d'url ^^ il faut 10 post minimum . Mais oui c'est bien la bonne url :

J'ai testé le code réécris et si je met en paramètre x alors j'ai une erreur : #valeur et si je met "x" ca me met une erreur "Un appel de fonction du côté gauche de l’affectation doit renvoyer une variante ou un objet".

Liste tous les paramètres dont tu as besoin.

Tant qu'à faire autant tous les récupérer sur une seule interrogation.

eric

bonjour,

je t'ai mis un classeur avec

1 test d'appel de la fonction comme une fonction excel en B1 et B2

2 un bouton qui permet d'exécuter une macro de test qui fait appel à la même fonction.

dans le 2 cas, cela fonctionne sans problème.

279getcoordinate.xlsm (17.40 Ko)

Rectificatif.

Ca fonctionne c'est moi qui est fait une bourde ! ( forcément si le nom de la fonction renvoie autre chose forcément ^^).

Pour être sur de comprendre la démarche,

La stratégie adoptée c'est de considérer le résultat comme une liste et de boucler sur les délimitateurs " " jusqu'à tomber sur l'occurence ?

Merci en tous cas pour le coup de main !!

re-bonjour,

La stratégie adoptée c'est de considérer le résultat comme une liste et de boucler sur les délimitateurs " " jusqu'à tomber sur l'occurence ?

voici la réponse de l'api à la requête:

{"type": "FeatureCollection", "version": "draft", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [7.364854, 48.204578]}, "properties": {"label": "1 Rue des Vignerons 68750 Bergheim", "score": 0.8512170818773342, "housenumber": "1", "id": "68028_0640_00001", "type": "housenumber", "x": 1024107.18, "y": 6798318.56, "importance": 0.36338790065067716, "name": "1 Rue des Vignerons", "postcode": "68750", "citycode": "68028", "city": "Bergheim", "context": "68, Haut-Rhin, Grand Est", "street": "Rue des Vignerons"}}], "attribution": "BAN", "licence": "ETALAB-2.0", "query": "1 rue des vignerons", "filters": {"postcode": "68750"}, "limit": 5}

la stratégie est de couper les parties de la réponse délimitées par un espace (" ") et de chercher parmi ces parties celle qui contient "x": ou "y": et de prendre la partie qui suit en lui ôtant la virgule finale.

Si je peux me permettre : https://forum.excel-pratique.com/viewtopic.php?p=864432#p864432

non ?

d'accord avec toi x et y ne correspondent pas à longitude et latitude

c'est un autre post

bonsoir Eriiic,

c'est un autre post

je dois être complètement aveugle, mais pour moi il s'agit du même post, le lien que tu as mis pointe vers ce post-ci me semble-t-il.

Je pointais celui-ci, adressé au demandeur :

Liste tous les paramètres dont tu as besoin.

Tant qu'à faire autant tous les récupérer sur une seule interrogation.

Bonne nuit

eric

Oulà excusez moi pour le retard dans les réponses ^^.

@ eric Par récupérer tous dans une seule interrogation j'imagine que tu veux dire par la stocker la réponse de l'API dans une variable au lieu de la réinterroger pour obtenir Y ?

Pour ce qui est des coordonnées oui j'ai modifié le code c'était bien les données suivant "coordonnées" et non pas x et y (c'est la commande curl qui m'a induit en erreur).

Pas bonjour non plus,

oui, tu récupères toutes les données de l'adresse, et tu cherches dans la chaine retournée celles qui t'intéressent.

Pas la peine d’interroger 3 fois la base pour 3 données.

D'autant plus que tu n'arrives pas à lui spécifier celle qui t'intéresse.

eric

Rechercher des sujets similaires à "retour api"