Récemment, les tickers de certaines valeurs ont été modifiés sur le site de Google Finance. Il s’avère que la fonction GOOGLEFINANCE dans Google Sheets n’arrive plus à extraire les cours de cours de bourse de ces tickers. Je vous propose une alternative avec YAHOO_PRICE_ON_DATE.

A titre d’exemple, on pouvait extraire le cours de bourse de l’ETF MCSI World (en EURO et accumulant) avec le ticker CW8 ou le ticker EPA:CW8. Le ticker vient d’être modifié en CW8-ETFP.
Aucun de ces tickers (ou aucune variation ou combinaison) ne permet d’extraire la valorisation avec la fonction GOOGLEFINANCE. Le problème va certainement bientôt être résolu. Mais en attendant, vous ne pouvez plus extraire la valorisation avec GOOGLEFINANCE.

Il existe une alternative avec la fonction YAHOO_PRICE_ON_DATE.
Il faut cependant utiliser un code Apps Script pour pouvoir utiliser cette fonction. Mais elle ne fonctionne pas pour toutes les valeurs. Je vous montre ci-dessous comment utiliser YAHOO_PRICE_ON_DATE.
Utiliser YAHOO_PRICE_ON_DATE (les étapes)
Dans votre feuille de calcul, vous devez commencer par cliquer sur Extensions, dans la barre des menus. Et ensuite sur Apps Script.

Dans l’écran Apps Script qui apparaît, vous devez supprimer le code qui est déjà saisi.

Ensuite, vous devez copier le code ci-dessous et cliquez sur l’icône en forme de disquette pour l’enregistrer.
Pour rendre à César ce qui est à César, je vous informe que j’ai copié le code partagé ici : https://pastebin.com/T4iYtaa9#4txnPcPR
Voici le code à copier.
// var url = 'https://query2.finance.yahoo.com/v8/finance/chart/0P0001BM48.F?symbol=0P0001BM48.F&period1=1733961600&period2=1734393600&interval=5d'
/**
* Extrait la valeur de clôture à partir du ticker Yahoo Finance pour une date précise.
*
* @param {string} le ticker de Yahoo Finance ticker symbol (par exemple "MC.PA" pour LVMH).
* @param {Date} la date de valorisation (on peut faire référence à une cellule qui contient la date).
* @return {number} la valeur de clôture ou un message d'erreur si la valeur n'est pas trouvée.
* @customfunction
*/
function checkDataStructure(result) {
// 1. Check if the 'result' object is falsy (null, undefined, etc.)
if (!result) {
return "ERROR: The data object itself is missing or empty.";
}
// 2. Check for the 'timestamp' property
if (!result.timestamp) {
return "ERROR: 'timestamp' property is missing or invalid in the data.";
}
// 3. Check for the nested structure step-by-step
const quoteData = result.indicators?.quote;
// Check for 'indicators' or 'quote' array
if (!quoteData) {
return "ERROR: The 'indicators.quote' array is missing or empty.";
}
// Check if the 'quote' array has at least one element
if (quoteData.length === 0) {
return "ERROR: 'indicators.quote' array is empty.";
}
const firstQuote = quoteData[0];
// Check for the 'close' property on the first element
if (!firstQuote.close) {
return "ERROR: The 'close' price is missing or invalid in the first quote element.";
}
// If all checks pass, the data structure is valid
return null; // Or return the data if you prefer
}
function YAHOO_PRICE_ON_DATE(symbol, date) {
// Use the date components to create a new Date object at UTC midnight.
// This is the most reliable way to handle dates passed from Google Sheets.
const targetDateUTC = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
const targetTimestamp = Math.floor(targetDateUTC.getTime() / 1000); // Target day's midnight UTC
// Set a range (e.g., 10 days before to 1 day after)
const oneDay = 24 * 60 * 60; // seconds
const period1 = targetTimestamp - (10 * oneDay);
const period2 = targetTimestamp + (1 * oneDay);
// 2. Construct the URL with a DAILY interval
const url = `https://query2.finance.yahoo.com/v8/finance/chart/${symbol}?symbol=${symbol}&period1=${period1}&period2=${period2}&interval=1d`;
try {
const response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
const data = JSON.parse(response.getContentText());
const result = data?.chart?.result?.[0];
const validationError = checkDataStructure(result);
if (validationError) {
// The checkDataStructure function returned an error string, so we return it.
return validationError;
}
const timestamps = result.timestamp;
const closePrices = result.indicators.quote[0].close;
// 3. Find the matching price
for (let i = 0; i < timestamps.length; i++) {
// API timestamps are usually midnight UTC for the end of the trading day.
if (timestamps[i] === targetTimestamp) {
const price = closePrices[i];
if (price !== null) {
return price;
}
}
}
// Fallback: if the exact timestamp isn't found, return the most recent price
// *before* the target date, as market data may be delayed or unavailable for the exact day.
for (let i = timestamps.length - 1; i >= 0; i--) {
if (timestamps[i] <= targetTimestamp && closePrices[i] !== null) {
return closePrices[i];
}
}
return "Price not found for date.";
} catch (e) {
return `ERROR: ${e.toString()}`;
}
}
N’oubliez pas de cliquer sur l’icône en forme de disquette pour enregistrer le code :

Le ticker de Yahoo Finance n’est malheureusement pas le même que celui de Google Finance. Il vous faut donc aller sur le site de finance.yahoo.com pour récupérer le ticker. Exemple ici :

La fonction YAHOO_PRICE_ON_DATE contient deux paramètres :
- le ticker de l’action (ou ETF ou index) dont vous voulez obtenir la valorisation ;
- la date (pour obtenir le cours actuel, vous pouvez utiliser la fonction AUJOURDHUI()).
Ici, pour l’ETF CW8 qui ne fonctionne plus avec GOOGLEFINANCE, j’ai saisi la formule suivante :
=YAHOO_PRICE_ON_DATE("CW8.PA";AUJOURDHUI())
Mais, plutôt que de saisir le ticker dans la formule, je préfère faire référence à la cellule dans laquelle j’ai saisi le ticker. Comme dans l’image ci-dessous.

Choisir entre YAHOO_PRICE_ON_DATE et GOOGLFINANCE
Certains tickers ne fonctionnent pas avec Yahoo (comme pour l’index de suivi du CAC40), mais cela fonctionne avec GOOGLEFINANCE. C’est à vous de voir quels tickers fonctionnent pour faire le bon choix.

Cela conduit malheureusement à un mélange des fonctions dans votre tableau.
J’espère vous avoir aidé avec ce petit guide sur YAHOO_PRICE_ON_DATE.
Pour progresser avec Google Sheets, je vous recommande de parcourir les articles et les vidéos que je partage sur TopSheets.



