[Google Sheets] ImportHTML

Bonjour,

ImportHTML est l'une des 4 fonctions principales permettant de capter des données du Web sans passer par des scripts ou macros.

  1. ImportHTML : pages HTML
  2. ImportData : données au format csv (comma = virgule) ou tsv (tabulation)
  3. ImportFeed : flux rss
  4. ImportXML : tout fichier structuré, xml, xhtml, ...

Pourquoi capter des informations présentes sur le web ?

  • Il est parfois utile de rapatrier des données à des fins d’utilisation personnelle ou professionnelle comme une conversion de devise, une évaluation d’un portefeuille boursier, des tendances météorologiques,…
  • Dans ce cas, il faut parfois pouvoir capter des données publiées à l’état formaté mais non directement accessibles : formats xml, rss, csv
  • Ceci doit toujours se faire conformément à la législation et dans le respect des droits d’auteurs et d’utilisation des données publiés le cas échéant.

Exemples et syntaxe :

1-

Prenons le cas des taux de conversion de devises publiés par la Banque de France https://www.banque-france.fr/statistiques/taux-et-cours/les-taux-de-change-salle-des-marches/parites...

=ImportHTML(url;"table";1)

1 étant la première table trouvée sur la page, cette formule donnera un tableau comportant la devise, le code de devise, le taux sur les 5 derniers jours ... au passage il sera possible de voir la tendance avec la formule =SPARKLINE

Il est possible de réduire le nombre de colonnes et ordonner la sortie comme suit

=query({IMPORTHTML(url;"table";1)};"select Col2,Col1,Col7 order by Col2";1)

2-

Prenons le cas de https://www.excel-pratique.com/fr/fonctions

L'affichage du fichier source de la page et la recherche du mot table indique que les informations sont à la 5ème occurrence de table

=ImportHTML(url;"table";5)

La table a 2 colonnes : la fonction et son action (*). On peut adjoindre à la fonction les intitulés des colonnes

={"fonction"\"action";importhtml(A1;A2;B2)}

le caractère \ sépare les données d'une même ligne (remplace la virgule utilisée dans les pays anglo-saxons) et ; renvoie les nouvelles données dans une autre ligne.

Les exemples sont disponibles en copie ici : https://docs.google.com/spreadsheets/d/1_v58wXpvs5DoSuWyT6rmHAXGOg6Ov5LjP_WbwkoXqRE/edit?usp=sharing


(*) Pour importer les liens contenus dans les balises a, il faudra utiliser la fonction ImportXML plus puissante à voir dans le tuto correspondant.

=ImportXML( url ; chemin )
avec chemin : //*[@id="article"]/table[5]//a/@href

Nota : si les paramètres régionaux ne sont pas en phase avec les données disponibles, cela peut conduire à ce que les dates soient mal retranscrites, et que les données décimales soient dans certains cas interprétées comme des dates. On utilisera alors la fonction ImportData avec transformation des donnés importées.

Bonsoir,

Tester et fonctionne bien sur le web, je testerai sur des gros volumes de data en intranet

Cela en local il me retourne une erreur NA

Bonjour

Tester et fonctionne bien sur le web, je testerai sur des gros volumes de data en intranet

Cela en local il me retourne une erreur NA

Il y a des limitations en terme de volume, plus sur ImportData et ImportXML.

Et oui, il faut mettre les données sur serveur.

Bonjour,

Dommage pour le local

C'est effectivement plus simple que des dizaines de lignes dans VBA, sa peut aider en complétement de excel pour d'autres tâches, merci pour ton aide, je m'en servirai au boulot :)

Je vais regarder l'aspect "local", il faut sans doute un émulateur de serveur, genre XAMP, Tiny server, Caddy ... je vais testr le dernier réputé pour sa simplicité.

Bonjour à tous,

Ces fonctions ne pourront pas accéder à un site local puisque le résultat de ces fonctions est calculé à partir du serveur de Google (qui n'a aucun accès au site local).

Pour accéder à un site hébergé localement (ou pour éviter des restrictions de volume), il faudrait plutôt tenter de le faire côté client en JavaScript via une boîte de dialogue ou une sidebar.

Cordialement,

Merci à vous c'est pas mal

Rechercher des sujets similaires à "google sheets importhtml"