Importer une seule donnée depuis le Web vers Excel

Bonjour,

Je souhaite que mon fichier Excel récupère en temps réel le prix du gasoil pratiqué dans une station-service précise.

Le site suivant (https://www.prix-carburants[point]gouv[point]fr) donne la donnée qui m'intéresse, après avoir effectué une recherche sur celui-ci.

Prenons un exemple :

Je souhaite connaitre le prix du gasoil à la station-service "HALLES GARAGE SAS | Oil France" située dans 75001 (voir capture d'écran). Le site me donne donc "1.940". C'est uniquement cette donnée que je souhaite récupérer sur mon tableau Excel (servant à faire des calculs de coûts). Ainsi, j'aimerais que la donnée dans mon tableau Excel soit toujours identique avec celle indiquée sur ce site.

Si j'ouvre mon tableau Excel dans plusieurs jours, j'aimerais que la valeur ait changé, conformément au changement de prix sur le site.

Sauriez-vous comment procéder ?

capture d ecran

Bonjour,

Comment arrives-tu à cette recherche précise ? On demande des trucs* pas possible à remplir !

* comme le type d'enseigne !

A partir de là, on pourra voir comment pointer sur cette info.

Bonjour,

Il faut passer par l'API.

Ici :

Comme ça :

(donnée price_gazole)

Une discussion qui traite du sujet API en VBA :

https://forum.excel-pratique.com/viewtopic.php?f=2&t=136143&p=837609&hilit=SIRENE#p837609

Merci oxydum ...

donc, de façon spécifique pour Paris 75001 ...

Bonjour à tous,

Pour info., avec Power Query.

Cdlt.

Et de façon plus condensée, intégrable dans une macro ...

Function Prix()
On Error Resume Next
    DoEvents
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://public.opendatasoft.com/api/records/1.0/search/?dataset=prix_des_carburants_j_7&q=75001", False
        .Send
        If .Status = 200 Then
            Prix = Val(Split(Split(.responsetext, "price_gazole"":")(1), ",")(0))
       End If
    End With
End Function
Sub test()
MsgBox Prix
End Sub

Merci pour vos retours ! J'ai néanmoins quelques petits soucis.

En effet, je n'ai besoin que de la case avec le prix, aucune autre information ne doit paraitre (dans un souci de lisibilité car cela s'inscrit dans un fichier Excel déjà bien garni).

Également, le prix ne s'affiche qu'avec 2 décimales alors que le site en indique 3. Comment obtenir ainsi un prix avec 3 décimales ?

Enfin, comment faire pour que le prix s'actualise en permanence, sans devoir cliquer sur un bouton de "RECHERCHE PRIX" ?

En effet, je n'ai besoin que de la case avec le prix, aucune autre information ne doit paraitre (dans un souci de lisibilité car cela s'inscrit dans un fichier Excel déjà bien garni).

C'est pourquoi j'ai fait une réduction drastique du code par une fonction, que tu peux intégrer à ton projet. https://forum.excel-pratique.com/viewtopic.php?p=837906#p837906

Mais comme je n'ai pas vu l'embryon de ton application, je te laisse la main.


Également, le prix ne s'affiche qu'avec 2 décimales alors que le site en indique 3. Comment obtenir ainsi un prix avec 3 décimales ?

Mais la solution d'interrogation proposée par oxydum via public.opendatasoft https://forum.excel-pratique.com/viewtopic.php?p=837886#p837886 ne donne que 2 décimales.

Dans ce cas il faut repartir de la page web ... on retourne donc à mes questions ici :

Comment arrives-tu à cette recherche précise ? On demande des trucs* pas possible à remplir !

* comme le type d'enseigne !

A partir de là, on pourra voir comment pointer sur cette info.


Enfin, comment faire pour que le prix s'actualise en permanence, sans devoir cliquer sur un bouton de "RECHERCHE PRIX" ?

Une fois les problèmes réglés ci-dessus, on pourra mettre en place un timer

C'est pourquoi j'ai fait une réduction drastique du code par une fonction, que tu peux intégrer à ton projet. https://forum.excel-pratique.com/viewtopic.php?p=837906#p837906

Mais comme je n'ai pas vu l'embryon de ton application, je te laisse la main.

Ton fichier est très intéressant mais comment faire pour que l'information s'affiche dans la case A1 par exemple (et non dans une boite de dialogue) ?


Mais la solution d'interrogation proposée par oxydum via public.opendatasoft https://forum.excel-pratique.com/viewtopic.php?p=837886#p837886 ne donne que 2 décimales.

Dans ce cas il faut repartir de la page web ... on retourne donc à mes questions ici :

Comment arrives-tu à cette recherche précise ? On demande des trucs* pas possible à remplir !

* comme le type d'enseigne !

A partir de là, on pourra voir comment pointer sur cette info.

Voici les étapes sur le site https://www.prix-carburants[point]gouv[point]fr :

  • Entrer le code postal de la ville de la station service recherchée dans "Choisissez un lieu (obligatoire)".
  • Tester avec "33000", puis lancer la recherche.
  • Lire la donnée qui nous intéresse (par exemple le prix du gazoil à "RELAIS TRINQUET | Total").
C'est cette donnée, soit "1,479", que je souhaite récupérer :

capture d ecran bordeaux

Une fois les problèmes réglés ci-dessus, on pourra mettre en place un timer

Parfait !

Ton fichier est très intéressant mais comment faire pour que l'information s'affiche dans la case A1 par exemple (et non dans une boite de dialogue) ?

Tout simplement comme ceci :
Sub afficherprixgasoil()
Range("A1") = Prix
End Sub

puisque Prix est le nom de la fonction (sans argument ici)

Sub sur laquelle il faudra greffer un timer

Je regarderai demain comment accéder à la page web qui donne 3 chiffres après la virgule.

Bonjour,

J'ai commencé à défricher le terrain. On passe d'un niveau de relative simplicité avec public.opendatasoft (t 2 décimales) à un niveau de très grande complexité avec 3 décimales.

En effet, les paramètres sont passés en méthode post -ça on sait faire-, mais le site attribue d'abord un jeton (token) ! La question est de savoir s'il faut transférer à blanc tous les paramètres, s'il faut obligatoirement renseigner un jeton et si oui lequel (un ancien ou un nouveau qu'il faudra au préalable aller rechercher). Donc le risque est sans doute de devoir simuler une interrogation avec un navigateur capable de cela ... Je veux bien relever le challenge juste pour l'honneur mais je ne suis pas sûr que cela en vaille la peine car cela va donner des contraintes à un site que tu me dis déjà bien ficelé.

A suivre ...

Voici une solution (bien complexe) pour simuler l'interrogation via un navigateur intégré, récupérer un jeton, renseigner les paramètres, relancer le navigateur, récupérer le résultat dans le presse-papier, découper ce résultat et rechercher par une expression régulière la valeur ... ouf, il y a les 3 chiffres !

Merci beaucoup pour le temps que tu as pris ! Je dois néanmoins reconnaitre que l'erreur venait de mon côté. En effet, j'ai pris conscience trop tard que toutes les stations-service ne vendent pas leur carburant avec 3 décimales : certaines ne donnent que 2 décimales. Il était donc inutile de chercher une donnée inexistante. Mea culpa !

Concernant le timer, saurais-tu comment l'insérer dans le code afin que la valeur affichée s'actualise à chaque ouverture du fichier Excel ?

Concernant le timer, saurais-tu comment l'insérer dans le code afin que la valeur affichée s'actualise à chaque ouverture du fichier Excel ?

Si c'est une actualisation à l'ouverture il faut ajouter une procédure événementielle

Par exemple :

Private Sub Workbook_Open()
Range("A1") = Prix
End Sub

pour la version la plus simple que j'ai reprise (2 décimales)

Bien sûr tu peux mettre le code postal en paramètre

        .Open "GET", "https://public.opendatasoft.com/api/records/1.0/search/?dataset=prix_des_carburants_j_7&q=75001", False

Pour l'autre version (plus pointu)

Private Sub Workbook_Open()
RecherchePrix
End Sub

Merci pour ces informations, cela fonctionne très bien !

Pour clore ce sujet, je souhaiterais que mon fichier Excel "ressemble" à une application.

En effet, j'aimerais qu'il ait une icône personnalisée unique : comme tout logiciel. Je ne souhaite pas créer de raccourci, ce n'est pas très professionnel et compliqué à envoyer par mail.

Pour résumé, j'aimerais que mon fichier Excel ait une icône propre à lui même (et non générique à tous les fichiers .xlsm) et que cette icône soit conservée même après l'envoi d'un mail (c'est à dire que ce soit le fichier Excel qui dise "affiche moi telle image en icône" et non pas le Windows de mon ordinateur).

A part sur un raccourci, je ne sais pas faire ce que tu demandes.

Si personne ne prend le relais, je te conseille de poster un nouveau sujet.

Merci pour ton aide !

Bonjour, bonjour Steelson,

(...) j'aimerais qu'il ait une icône personnalisée unique : comme tout logiciel. Je ne souhaite pas créer de raccourci, ce n'est pas très professionnel et compliqué à envoyer par mail.

Pour résumé, j'aimerais que mon fichier Excel ait une icône propre à lui même (et non générique à tous les fichiers .xlsm) et que cette icône soit conservée même après l'envoi d'un mail (c'est à dire que ce soit le fichier Excel qui dise "affiche moi telle image en icône" et non pas le Windows de mon ordinateur).

Tu trouveras ta réponse ici :

Il y a un classeur à télécharger.

Merci pour le lien mais celui-ci ne m'apporte pas la solution que je recherche...

Je viens de me rendre compte que les données de ce site (

) ne correspondent pas à une information en temps réel des prix pratiqués par les stations-service. En effet, ces données peuvent avoir jusqu'à 7 jours d'existence, et ne sont donc pas en temps réel.

Je souhaiterais obtenir les données contenues dans ce lien :

(précisémment dans

). Le problème est que c'est un fichier XML compressé dans une archive...

Sauriez-vous comment récupérer les données de ce fichier XML, sans devoir le télécharger puisqu'il se met à jour en temps réel ?

Rechercher des sujets similaires à "importer seule donnee web"