Retour au blog

Taux de change en direct dans Excel : Power Query, WEBSERVICE et une API de devises

V
Vlado Grigirov
August 18, 2026
Currency API Exchange Rates Excel Power Query Tutorial Finexly

Tous les tutoriels sur les taux de change en direct dans Excel promettent la même chose et livrent discrètement autre chose. Vous suivez les étapes, un nombre apparaît dans une cellule, et il a l'air d'être en temps réel. La plupart du temps, il ne l'est pas. C'est un taux de référence publié une fois par jour, une cotation différée, ou un tableau HTML récupéré par scraping qui renverra silencieusement la mauvaise devise à la prochaine actualisation.

Ce guide couvre les quatre méthodes qui fonctionnent vraiment — le type de données Devises intégré à Excel, la fonction WEBSERVICE, Power Query et un LAMBDA réutilisable — et, surtout, il vous dit laquelle tourne dans votre version d'Excel, à quel point chacune est réellement fraîche, et où chacune produit des chiffres faux sans lever la moindre erreur.

Chaque formule et chaque requête ci-dessous a été écrite d'après les formats de réponse documentés de l'API Finexly et testée avant publication.

Les quatre méthodes, et celle que vous pouvez réellement utiliser

Les fonctionnalités de change d'Excel dépendent de la version dans des proportions inhabituelles. La moitié des tutoriels sur le sujet recommandent une méthode qui n'existe pas sur la machine du lecteur. Commencez ici.

MéthodeFonctionne dansFréquence de mise à jour réellePeut envoyer une clé API en toute sécurité ?Idéal pour
Type de données DevisesMicrosoft 365 (Windows + Mac), Excel pour le web. Pas 2016/2019/2021/2024Différée, aucun intervalle publié ; actualisation manuelle ou à l'ouvertureS. o. — aucune API impliquéeUne consultation rapide, une poignée de paires
WEBSERVICEBureau Windows uniquement : M365, 2024, 2021, 2019, 2016. Pas Mac, web ni mobileCe que renvoie votre API — mais la fonction est volatile❌ Non. La clé doit figurer dans l'URLUne ou deux cellules, prototypes rapides
Power QueryExcel 2016+ sur Windows. M365 pour Mac dispose de Power Query mais sans connecteur WebCe que renvoie votre API, à chaque actualisation✅ Oui, via Headers en MTables de taux, conversion en masse, production
Wrapper LAMBDAExcel 2021+/M365 sur Windows (hérite des limites de WEBSERVICE)Identique à WEBSERVICE❌ NonUn =FXRATE() propre pour les utilisateurs de tableurs
Deux conséquences découlent directement de ce tableau :

  1. Si vous êtes sur Mac, le connecteur Web de Power Query ne figure pas parmi vos sources disponibles et WEBSERVICE ne fonctionne tout simplement pas. Microsoft est explicite : WEBSERVICE « peut apparaître dans la galerie de fonctions d'Excel pour Mac, mais elle repose sur des fonctionnalités du système d'exploitation Windows et ne renverra donc aucun résultat sur Mac ». En pratique, les utilisateurs Mac sous Microsoft 365 sont limités au type de données Devises.
  2. Si vous êtes sur une licence perpétuelle Excel 2019, 2021 ou 2024, le type de données Devises ne vous est pas accessible — les types de données liées sont réservés à Microsoft 365 et à Excel pour le web. Votre voie, c'est WEBSERVICE ou Power Query.

Méthode 1 : le type de données Devises intégré à Excel

C'est l'option zéro code, et celle par laquelle la plupart des articles commencent.

  1. Saisissez des paires de devises dans une colonne à l'aide des codes ISO 4217 séparés par une barre oblique ou un deux-points — USD/EUR, GBP:JPY. (Si vous hésitez sur le code à employer, notre référence ISO 4217 les liste tous.)
  2. Sélectionnez les cellules, puis allez dans Données → Types de données → Devises.
  3. Chaque cellule devient un enregistrement lié avec une petite icône de devise. Cliquez sur l'icône, ou utilisez le bouton Insérer des données, et choisissez Prix pour déverser le taux dans la cellule adjacente.
  4. Actualisez avec Données → Actualiser tout.

Ce que Microsoft promet réellement

C'est la partie que les tutoriels sautent. La documentation de Microsoft affiche un avertissement sur la page Devises : « Les informations sur les devises sont fournies "en l'état" et peuvent être différées. Ces données ne doivent donc pas être utilisées à des fins de trading ou de conseil. » Il n'existe aucun intervalle d'actualisation publié pour les paires de devises. Les données financières sous-jacentes proviennent de LSEG Data & Analytics (anciennement Refinitiv), exposées via Bing.

Trois contraintes supplémentaires qui comptent si vous construisez quelque chose de sérieux :

  • La disponibilité dépend du locataire. Microsoft indique que « les paires de devises sont uniquement disponibles pour les comptes Microsoft 365 (clients multi-locataires mondiaux) ». Si votre organisation est sur un cloud souverain ou gouvernemental, le bouton Devises sera grisé et aucun dépannage n'y changera quoi que ce soit.
  • Il n'y a pas d'actualisation côté serveur. Les types de données liées ne s'actualisent que lorsque le classeur est ouvert dans Excel. L'option automatique de cinq minutes existe, mais elle est pour l'instant réservée au programme Insiders, et Microsoft précise que « certains types de données liées ne peuvent être actualisés que manuellement ».
  • La paire est opaque. Vous obtenez un nombre. Vous ne voyez ni l'horodatage, ni la source, ni le spread. Pour la facturation ou le reporting, il vous faut un taux auditable assorti d'une date — ce qui est un problème très différent.

Utilisez cette méthode pour jeter un œil à un taux. Ne l'utilisez pas comme entrée de quoi que ce soit que vous devrez justifier plus tard.

Méthode 2 : WEBSERVICE plus une API de devises

WEBSERVICE(url) exécute un GET HTTP et renvoie le corps de la réponse sous forme de texte. Elle prend exactement un argument — une URL. Ce seul fait détermine tout le reste de cette méthode.

Pourquoi votre clé API doit figurer dans l'URL

Comme WEBSERVICE n'a pas de paramètre d'en-têtes, vous ne pouvez pas envoyer Authorization: Bearer …. Toute API que vous appelez depuis WEBSERVICE doit accepter la clé en paramètre de requête. Finexly prend en charge les deux formes :

# Recommended everywhere else — but impossible from WEBSERVICE
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.finexly.com/v1/rate?from=USD&to=EUR"

# The query-parameter form, which is what WEBSERVICE needs
https://api.finexly.com/v1/rate?from=USD&to=EUR&api_key=YOUR_API_KEY

Soyez honnête avec vous-même sur ce compromis. Les clés placées dans les URL finissent dans les journaux d'accès des serveurs et peuvent fuiter via les en-têtes HTTP referrer, et la clé est stockée en clair dans le classeur — donc toute personne à qui vous envoyez le fichier par e-mail dispose de votre clé. Utilisez une clé distincte à faible quota pour les tableurs, et ne diffusez jamais un classeur WEBSERVICE contenant une clé de production.

Une formule qui fonctionne

Placez l'URL en A1 et la réponse brute en A2 :

A1:  ="https://api.finexly.com/v1/rate?from="&B1&"&to="&C1&"&api_key="&$D$1
A2:  =WEBSERVICE(A1)

A2 contient désormais le texte littéral de la réponse :

{"pair":"USD_EUR","rate":0.9215}

Il reste à extraire le nombre. Presque tous les tutoriels concurrents le font par position — INDEX(TEXTSPLIT(...), 1, 6) — ce qui casse en silence dès que l'API ajoute un champ ou que vous changez d'endpoint. Ancrez-vous plutôt sur le nom de la clé :

=LET(
   raw,  A2,
   p,    FIND("""rate"":", raw) + 7,
   e,    MIN(IFERROR(FIND(",", raw, p), 9999), IFERROR(FIND("}", raw, p), 9999)),
   IFERROR(VALUE(MID(raw, p, e - p)), NA())
 )

Cette formule cherche la chaîne littérale "rate":, franchit ses sept caractères, puis lit jusqu'au premier des deux caractères suivants — une virgule ou une accolade fermante. Elle renvoie 0.9215 aussi bien depuis la réponse à deux champs de /v1/rate que depuis la réponse à quatre champs de /v1/convert-amount, et elle renvoie #N/A plutôt qu'un nombre faux si l'appel échoue. LET exige Excel 2021 ou Microsoft 365 ; sur Excel 2016/2019, vous pouvez écrire les mêmes appels FIND en ligne, au prix de la lisibilité.

Le piège de la volatilité

WEBSERVICE est une fonction volatile. Elle se recalcule à pratiquement chaque modification de la feuille, pas seulement quand vous appuyez sur F9. Construisez un convertisseur de 40 lignes avec un WEBSERVICE par ligne et une seule frappe au clavier déclenche 40 requêtes HTTP.

Sur un palier gratuit de 1 000 requêtes par mois, cela représente environ 25 frappes avant d'être coupé. Deux parades : cantonner WEBSERVICE à une seule cellule et référencer cette cellule partout ailleurs, ou passer le calcul en manuel (Formules → Options de calcul → Manuel) pendant la phase de construction. Mieux encore, utilisez Power Query, qui n'est pas volatile.

Méthode 3 : Power Query — celle qui passe à l'échelle

Power Query est la seule méthode ici capable d'envoyer un en-tête Authorization, de s'actualiser selon une planification et de traiter une table de cinquante mille lignes sans fondre. C'est aussi la méthode que tous les tutoriels démontrent uniquement par des clics dans l'interface, si bien que le code M réel reste introuvable. Le voici.

Ouvrez Données → Obtenir des données → Lancer l'éditeur Power Query, puis Nouvelle source → Requête vide, puis Accueil → Éditeur avancé, et collez :

let
    ApiKey = "YOUR_API_KEY",
    Pairs  = "USD_EUR,USD_GBP,USD_JPY,USD_CHF",
    Source = Json.Document(
        Web.Contents(
            "https://api.finexly.com",
            [
                RelativePath = "v1/convert",
                Query        = [ q = Pairs ],
                Headers      = [ #"Authorization" = "Bearer " & ApiKey ]
            ]
        )
    ),
    ToTable  = Record.ToTable(Source),
    Expanded = Table.ExpandRecordColumn(ToTable, "Value", {"rate"}, {"rate"}),
    Split    = Table.SplitColumn(
                   Expanded, "Name",
                   Splitter.SplitTextByDelimiter("_", QuoteStyle.None),
                   {"Base", "Quote"}
               ),
    Typed    = Table.TransformColumnTypes(
                   Split,
                   {{"Base", type text}, {"Quote", type text}, {"rate", type number}}
               )
in
    Typed

Nommez-la FxRates et chargez-la dans une feuille de calcul. Vous obtenez une table propre à trois colonnes : Base, Quote, rate.

Trois détails de cette requête font le vrai travail, et les trois manquent à toutes les démonstrations en mode graphique :

  • Headers garde la clé hors de l'URL. C'est le principal avantage de sécurité de Power Query sur WEBSERVICE.
  • RelativePath et Query sont délibérément séparés de l'URL de base. Si vous concaténez l'URL entière en une seule chaîne, Power Query la classe comme source de données dynamique, qui ne peut pas être actualisée sans surveillance dans le service Power BI. Passer le chemin et la requête séparément garde la source statique et actualisable.
  • Une requête, beaucoup de paires. /v1/convert renvoie en un seul appel toutes les paires demandées. Un classeur actualisé toutes les heures sur une journée de huit heures et 22 jours ouvrés effectue ainsi 176 requêtes par mois. Trente appels /v1/rate distincts sur la même planification en feraient 5 280 — cinq fois le quota mensuel gratuit, pour des données identiques.

Une fonction de taux réutilisable

Pour une paire unique à la demande, encapsulez-la dans une fonction M :

let
    FxRate = (baseCode as text, quoteCode as text) as number =>
        let
            ApiKey = "YOUR_API_KEY",
            Source = Json.Document(
                Web.Contents(
                    "https://api.finexly.com",
                    [
                        RelativePath = "v1/rate",
                        Query        = [ from = baseCode, to = quoteCode ],
                        Headers      = [ #"Authorization" = "Bearer " & ApiKey ]
                    ]
                )
            )
        in
            Source[rate]
in
    FxRate

Appelez-la depuis n'importe quelle autre requête avec FxRate("USD", "EUR").

Convertir 50 000 lignes sans 50 000 recherches

Étirer un XLOOKUP sur une grande table est lent et fragile — et si la sortie de la requête change de taille à l'actualisation, les références de colonne entière comme F:F se désaligneront en silence. Faites plutôt la jointure à l'intérieur de Power Query :

  1. Chargez votre table de transactions dans Power Query.
  2. Accueil → Fusionner des requêtes, en faisant correspondre votre colonne Currency à FxRates[Quote].
  3. Développez la colonne fusionnée et conservez rate.
  4. Ajouter une colonne → Colonne personnalisée avec la conversion.

Cela fait une seule jointure sur toute la table, évaluée une fois par actualisation, sans aucune formule volatile dans le classeur.

Méthode 4 : un LAMBDA =FXRATE() réutilisable

Si les personnes qui utilisent le classeur sont des utilisateurs de tableur plutôt que des auteurs de requêtes, masquez tout ce qui précède derrière une seule fonction. Allez dans Formules → Gestionnaire de noms → Nouveau, nommez-la FXRATE, et renseignez Fait référence à :

=LAMBDA(from_code, to_code, key,
   LET(
     url,  "https://api.finexly.com/v1/rate?from=" & from_code &
           "&to=" & to_code & "&api_key=" & key,
     raw,  WEBSERVICE(url),
     p,    FIND("""rate"":", raw) + 7,
     e,    MIN(IFERROR(FIND(",", raw, p), 9999), IFERROR(FIND("}", raw, p), 9999)),
     IFERROR(VALUE(MID(raw, p, e - p)), NA())
   )
 )

N'importe qui peut désormais écrire =FXRATE("USD","EUR",$D$1) et obtenir 0.9215. Stockez la clé une seule fois en D1, protégez cette cellule, et le reste du classeur n'y touche jamais. Notez que cette approche hérite de toutes les limites de WEBSERVICE — Windows uniquement, volatile, clé dans l'URL — c'est donc un gain d'ergonomie, pas de sécurité ni de montée en charge.

Cinq façons dont les conversions de devises dans Excel se trompent en silence

Ce sont des bugs d'exactitude, pas des messages d'erreur. Rien ne passe au rouge. Les chiffres ne sont simplement pas ceux que vous croyez.

1. Multiplier là où il faudrait diviser

C'est l'erreur la plus fréquente dans les tutoriels Excel publiés sur les devises, et il vaut la peine d'être précis sur les dégâts. Un taux USD_EUR de 0.9215 convertit des USD en EUR. Pour aller dans l'autre sens — des EUR vers des USD — on divise.

  • Correct : 100 / 0.9215 = 108,52 USD
  • Faux : 100 × 0.9215 = 92,15 USD

Le résultat est décalé du carré du taux, 0.9215² = 0.8492 — une sous-estimation de 15,1 % qui paraît tout à fait plausible dans un rapport. Inscrivez le sens dans vos en-têtes de colonne (taux USD→EUR, pas Taux) et l'erreur devient difficile à commettre.

2. Analyser le JSON par position

INDEX(TEXTSPLIT(response, ":", "}"), 1, 6) fonctionne jusqu'au jour où l'API ajoute un champ ; l'index 6 renvoie alors une autre valeur sans la moindre erreur. Ancrez-vous sur le nom de la clé, comme dans la formule LET ci-dessus, ou utilisez Json.Document de Power Query, qui analyse correctement.

3. Tout arrondir à deux décimales

Excel utilise par défaut deux décimales ; la norme ISO 4217, non. JPY, KRW et VND n'ont aucune sous-unité¥250.75 n'est pas un montant valide. BHD, KWD, OMR et TND en ont trois. Arrondir un total en JPY à deux décimales puis le réarrondir en aval, c'est ainsi que les rapprochements finissent décalés de quelques unités. Nous couvrons l'ensemble des règles dans notre guide sur l'arrondi des devises et les décimales.

4. Prendre un taux mid-market pour le taux qui vous sera facturé

Chaque taux de cet article — et de toutes les API gratuites — est le taux mid-market : le point médian entre le cours acheteur et le cours vendeur. Ce n'est pas ce que vous donnent votre banque, votre réseau de cartes ou votre prestataire de paiement. Les spreads réels vont d'environ 0,5 % à plusieurs pourcents. Si vous fixez le prix de marchandises ou établissez un devis client, ajoutez une colonne de marge explicite plutôt que de faire comme si le taux mid-market était le taux de règlement. Notre explication sur d'où les API de taux de change tirent leurs données détaille ce que ces flux représentent — et ne représentent pas.

5. Laisser un classeur en direct réécrire les chiffres du mois dernier

Celle-ci est grave et n'est presque jamais mentionnée. Si vos cellules de taux s'actualisent en direct, chaque ligne historique du classeur est revalorisée au taux du jour à chaque ouverture du fichier. Le chiffre d'affaires de mars change en avril. Votre rapprochement ne tombera jamais juste deux fois de suite.

Une fois qu'une transaction a eu lieu, son taux est un fait attaché à cette date, pas une valeur en direct. Figez-le : convertissez une fois, collez le résultat en tant que valeur à côté du taux et de la date utilisés, et réservez la requête en direct aux nouvelles lignes. C'est la même discipline que les systèmes de facturation multidevise et de gestion des notes de frais imposent au niveau de la base de données.

Bonus : les taux croisés

Si votre API renvoie tout par rapport à une seule devise de base, convertir EUR→GBP revient à diviser un taux par l'autre :

EUR→GBP  =  USD_GBP / USD_EUR  =  0.7892 / 0.9215  =  0.856430
1,000 EUR  =  856.43 GBP

N'arrondissez qu'à l'étape finale. Arrondir le taux croisé intermédiaire à quatre décimales avant de multiplier introduit une erreur qui se cumule sur une grande table. Vous trouverez plus de détails dans notre guide sur les taux de change croisés.

Actualisation automatique, limites de débit et rester sur le palier gratuit

Pour qu'une table de taux Power Query se mette à jour toute seule : faites un clic droit sur la requête dans Requêtes et connexions → Propriétés, puis cochez Actualiser les données lors de l'ouverture du fichier et/ou Actualiser toutes les N minutes.

Deux choses dont personne ne vous prévient :

  • L'actualisation à l'ouverture déclenche l'invite de sécurité des données externes d'Excel. Les utilisateurs verront une barre jaune et, tant qu'ils ne cliquent pas sur Activer, l'actualisation « automatique » ne fait rien. Ajouter le dossier à Centre de gestion de la confidentialité → Emplacements approuvés évite le problème.
  • Actualiser toutes les 15 minutes un taux publié une fois par jour est du pur gaspillage. Calez votre intervalle sur la fréquence réelle de changement de votre source. Pour la plupart des travaux de facturation et de reporting, une actualisation à l'ouverture suffit largement.

Surveillez votre consommation grâce aux en-têtes de réponse renvoyés par Finexly — X-RateLimit-Limit, X-RateLimit-Used et X-RateLimit-Units. Le plan gratuit autorise 1 000 requêtes par mois sans carte bancaire, ce qui est confortable pour un classeur actualisé à l'ouverture et juste pour une grille WEBSERVICE volatile. Si vous frôlez constamment le plafond, la solution consiste presque toujours à regrouper les appels dans /v1/convert plutôt qu'à passer à un plan payant. Notre guide de mise en cache et de gestion des erreurs applique les mêmes principes en dehors d'Excel.

Dépannage

SymptômeCauseSolution
#VALUE! depuis WEBSERVICEProtocole non pris en charge, URL de plus de 2 048 caractères, ou réponse dépassant la limite de 32 767 caractères par celluleUtilisez https, raccourcissez la requête, demandez moins de paires par appel
WEBSERVICE ne renvoie rien sur MacNon pris en charge en dehors du bureau WindowsUtilisez le type de données Devises ou déplacez le classeur sur Windows
Bouton Devises griséPas sur Microsoft 365, ou compte non multi-locataireVérifiez votre licence ; Excel perpétuel n'a pas de types de données liées
#BUSY! ou #CONNECT!Type de données lié encore en cours de résolution, ou absence de connectivitéPatientez, puis Données → Actualiser tout
Power Query : « source de données dynamique » à l'actualisationURL entière concaténée en une seule chaîneSéparez en RelativePath et Query comme montré plus haut
#N/A après actualisationCode de devise absent de la réponse, ou plages de recherche décaléesEncapsulez dans IFNA et utilisez des références de tableau structurées plutôt que F:F
401 UNAUTHORIZEDClé manquante, malformée, ou envoyée en en-tête là où un paramètre de requête est exigéVérifiez quel mode d'authentification la méthode prend en charge

Questions fréquentes

Excel peut-il obtenir des taux de change en temps réel ? Pas véritablement en temps réel. Le type de données Devises est explicitement documenté comme différé, sans intervalle publié, et la plupart des API gratuites publient une fois par jour ouvré. Ce que vous pouvez obtenir, c'est un taux actuel — actualisé à la demande depuis une source en direct, ce que fournit précisément une API de devises. Pour du FX au tick près, il vous faut un flux en streaming, pas un tableur.

Comment obtenir des taux de change dans Excel sans clé API ? Le type de données Devises ne nécessite aucune clé, mais il exige Microsoft 365 et ne vous donne ni horodatage ni piste d'audit. Pour tout ce que vous devrez rapprocher plus tard, une API avec clé est la meilleure réponse — et un palier d'API de devises gratuite ne coûte rien.

Pourquoi WEBSERVICE ne fonctionne-t-il pas dans Excel pour Mac ? La documentation de Microsoft indique que WEBSERVICE repose sur des fonctionnalités du système d'exploitation Windows et ne renvoie donc aucun résultat sur Mac, même si la fonction apparaît dans la galerie. Il en va de même pour FILTERXML. Les utilisateurs Mac devraient recourir à Power Query quand c'est possible, ou au type de données Devises.

Comment obtenir des taux de change historiques dans Excel pour une date précise ? Construisez une table de taux avec une ligne par date, alimentée depuis une source de taux historiques, puis faites un XLOOKUP dessus avec le mode de correspondance -1, afin que les week-ends et jours fériés retombent sur le dernier jour ouvré disponible. Ne revalorisez jamais des transactions passées au taux du jour.

Puis-je utiliser Power Query pour convertir toute une table de transactions d'un coup ? Oui, et vous devriez. Fusionnez votre requête de transactions avec votre requête de taux sur le code devise, développez la colonne de taux, et ajoutez une colonne personnalisée pour le montant converti. Une seule jointure remplace des dizaines de milliers de formules volatiles et s'actualise en une seule passe.

Quelle méthode choisir ? Une paire, vérification occasionnelle : le type de données Devises. Un prototype sur Windows : WEBSERVICE. Tout ce dont d'autres personnes dépendent : Power Query, à chaque fois.


Prêt à intégrer proprement des taux actuels dans votre tableur ? Obtenez votre clé API Finexly gratuite — sans carte bancaire. Vous disposez de 1 000 requêtes par mois sur plus de 170 devises, du paramètre de requête api_key qui rend WEBSERVICE possible, et de l'authentification par en-tête pour Power Query. Consultez la documentation de l'API pour la référence complète des endpoints, ou comparez les API de devises si vous êtes encore en phase d'évaluation.

Vlado Grigirov

Senior Currency Markets Analyst & Financial Strategist

Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...

View full profile →

Partager cet article