Depuis mi‑août 2024, la fonction Excel STOCKHISTORY()
renvoie aléatoirement #CONNECT!
et #CALC!
, surtout sur Microsoft 365 build 2408. Voici un guide clair pour diagnostiquer, contourner et stabiliser vos classeurs tout en limitant l’impact sur la production.
Contexte et portée du dysfonctionnement
À partir d’août 2024, un grand nombre d’utilisateurs d’Excel 365 (Windows et Mac) ont observé des erreurs intermittentes lors de l’appel de STOCKHISTORY()
. Les symptômes les plus fréquents :
#CONNECT!
: échec de connexion au service de données boursières.#CALC!
: évaluation interrompue par le moteur de calcul d’Excel (souvent après une cascade d’échecs côté service).- Variabilité aléatoire : un même fichier peut fonctionner un jour et échouer le lendemain, ou n’échouer que pour un sous‑ensemble de tickers/dates.
Le phénomène touche principalement le Current Channel version 2408 (août 2024) mais a été signalé dans d’autres canaux. Des améliorations ont été constatées fin août et début septembre, sans éliminer totalement les erreurs chez tout le monde.
Ce que nous avons constaté sur le terrain
Observation | Impact / précision |
---|---|
Ouvrir le classeur puis attendre 5–10 minutes permet parfois aux cellules de se remplir ; le service finit par répondre, mais très lentement. | Indique une latence ou une file d’attente côté service : plusieurs appels finissent par réussir sans modification locale. |
Créer un nouveau classeur et recopier les formules supprime souvent l’erreur ; le bug affecte surtout les fichiers existants. | Souvent lié à des métadonnées propres au fichier (cache interne, historique de calcul). Nouveau fichier = contexte propre. |
Les erreurs augmentent avec un grand nombre de requêtes simultanées ou des périodes longues. | Chaque appel sollicite le service externe ; multiplication des requêtes = risque de limites temporaires, timeouts ou débits bridés. |
#CALC! « Excel ran out of resources » survient après des vagues de #CONNECT! . | Conséquence secondaire : le moteur interrompt l’évaluation pour protéger les ressources, même si la syntaxe est correcte. |
Pourquoi STOCKHISTORY()
échoue
STOCKHISTORY()
est une fonction connectée : elle s’appuie sur une chaîne de services en ligne qui agrègent des données de fournisseurs tiers. Lorsque le fournisseur a une panne, une latence inhabituelle ou qu’il applique un bridage temporaire, Excel reçoit des erreurs de connexion. Par ailleurs, si trop d’appels échouent en rafale, le moteur de calcul peut cesser l’évaluation (#CALC!
) pour éviter de saturer la session.
Points clés à retenir :
- Une bonne syntaxe ne garantit pas un résultat si le service distant est perturbé.
- Les classeurs « lourds » (beaucoup de tickers, longues périodes, rafraîchissements fréquents) amplifient le risque.
- Les mises à jour d’Excel peuvent améliorer la robustesse des appels, mais ne corrigent pas une panne côté serveur.
Diagnostic rapide et reproductible
- Isoler un cas minimal : dans un classeur vierge, saisir une formule simple, par exemple :
=STOCKHISTORY("MSFT"; AUJOURDHUI()-10; AUJOURDHUI())
Si cela fonctionne ici mais pas dans votre fichier d’origine, le problème est probablement propre au classeur (cache, état d’évaluation, historique de calcul). - Tester l’attente contrôlée : ouvrir le fichier, ne rien recalculer pendant 5–10 minutes, puis appuyer sur F9 (ou Données ▸ Actualiser tout).
- Réduire le périmètre : limiter une formule à une seule propriété (ex. la clôture) et une courte plage ; comparer les résultats.
- Passer en calcul manuel : Fichier ▸ Options ▸ Formules ▸ Mode de calcul ▸ Manuel. Cela évite les recalculs en boucle pendant vos tests.
- Créer un duplicata propre : copier‑coller uniquement les formules dans un classeur neuf (sans styles ni objets) et tester.
Solutions de contournement efficaces
Réactualiser à la demande au lieu du continu
- Basculer en calcul manuel, travailler, puis lancer un recalcul global (F9) ou Actualiser tout à des moments choisis (fin de journée, pause).
- Sur Mac, même logique avec Formules ▸ Calcul.
Alléger et « throttler » les requêtes
- Limiter la simultanéité : évitez d’appeler 200 tickers sur 5 ans en une seule feuille. Répartissez par secteurs, par années, ou par onglets.
- Réduire les colonnes : ne demandez que les propriétés nécessaires. Par défaut,
STOCKHISTORY()
peut renvoyer Date, Close, Open, High, Low, Volume. Si vous n’utilisez que la clôture, ne tirez pas le volume et l’intraday haut/bas. - Couper en tranches temporelles : préférez des appels mensuels/annuels rassemblés ensuite par formule, plutôt qu’un énorme intervalle d’un coup.
Recréer les formules dans un classeur vierge
Cette action supprime fréquemment l’erreur. Elle élimine des artefacts invisibles (cache, dépendances fantômes, objets/formats) qui peuvent perturber l’évaluation.
Mettre à jour Excel
Installez une version récente (au moins >= 2409 si vous êtes sur le Current Channel). Les versions fin août/début septembre 2024 ont amélioré la stabilité chez de nombreux utilisateurs. Si vous êtes en environnement géré, discutez avec l’IT pour passer au canal le plus adapté.
Redémarrer et assainir l’environnement
- Fermer Excel et redémarrer l’ordinateur.
- Vider les caches temporaires d’Office et, si possible, du système.
- Redémarrer routeur/connexion pour rétablir des sessions réseau propres.
Comprendre et paramétrer STOCKHISTORY()
de façon plus robuste
Paramètre | Rôle | Conseil de robustesse |
---|---|---|
ticker | Symbole (ex. « MSFT »). | Valider la source du symbole (marché, suffixes) et normaliser en amont. |
start_date , end_date | Intervalle à rapatrier. | Privilégier des fenêtres courtes et les concaténer ensuite. |
interval | Granularité (jour/sem./mois). | Choisir l’intervalle suffisant (éviter le journalier si un agrégat mensuel suffit). |
headers | Entêtes inclus ou non. | Désactiver les entêtes si vous concaténez des blocs (moins de variations de mises en forme). |
Propriétés (0–5) | 0=Date, 1=Close, 2=Open, 3=High, 4=Low, 5=Volume. | Limiter strictement aux colonnes utiles (moins de charge côté service et côté calcul). |
Exemples de formules « résilientes »
Clôture récente avec repli sur la dernière valeur disponible (évite de briser des tableaux de bord pour une journée isolée qui renvoie une erreur) :
=LET(
fin; AUJOURDHUI();
brut; IFERROR(STOCKHISTORY(A2; fin-30; fin; 0; 1; 0; 1); NA());
valides; FILTER(brut; ESTNUM(INDEX(brut;;2)));
derniere; PRENDRE(valides; 1);
INDEX(derniere;;2)
)
Fenêtrage mensuel puis assemblage : deux appels plus courts, réunis ensuite. Adapté quand un intervalle long échoue en une requête unique.
=LET(
d1; DATE(2024;8;1); d2; DATE(2024;8;31);
d3; DATE(2024;9;1); d4; DATE(2024;9;30);
m1; IFERROR(STOCKHISTORY($A$2; d1; d2; 0; 1; 0; 1; 2; 3; 4; 5); NA());
m2; IFERROR(STOCKHISTORY($A$2; d3; d4; 0; 1; 0; 1; 2; 3; 4; 5); NA());
VSTACK(m1; m2)
)
Réduire les colonnes inutiles : si vous n’utilisez que la Date et la Clôture, ne demandez pas le Volume/High/Low :
=STOCKHISTORY($A$2; AUJOURDHUI()-60; AUJOURDHUI(); 0; 1; 0; 1)
Modèles VBA facultatifs (option avancée)
Pour les environnements où le recalcul manuel n’est pas souhaitable, ce petit module tente un rafraîchissement contrôlé sans surcharger le service. À utiliser avec discernement.
' Module standard: Recalc & Refresh All en douceur
Option Explicit
Public Sub RefreshStockHistorySafe()
Dim i As Long, maxTries As Long
maxTries = 3
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 1 To maxTries
DoEvents
Application.CalculateFullRebuild ' force recalcul propre
DoEvents
ThisWorkbook.RefreshAll ' connections / types de données
DoEvents
If Not HasConnectErrors Then Exit For
Application.Wait Now + TimeSerial(0, 0, 8) ' pause 8 s entre les passes
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Private Function HasConnectErrors() As Boolean
Dim ws As Worksheet, c As Range
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
For Each c In ws.UsedRange.SpecialCells(xlCellTypeFormulas)
If c.Text = "#CONNECT!" Or c.Text = "#CALC!" Then
HasConnectErrors = True
Exit Function
End If
Next c
On Error GoTo 0
Next ws
End Function
Important : ce script ne « répare » pas une panne côté serveur. Il espace simplement les tentatives et évite un harcèlement du service.
FAQ des erreurs STOCKHISTORY()
Erreur | Signification pratique | Action recommandée |
---|---|---|
#CONNECT! | Connexion au service impossible, timeout, bridage ou perturbation côté fournisseur. | Attendre 5–10 min, recalculer (F9), réduire la charge, diviser les requêtes, tester dans un classeur vierge. |
#CALC! / « ran out of resources » | Le moteur interrompt l’évaluation après trop d’échecs ou de calculs gourmands. | Basculer en calcul manuel, recalculer par sections, limiter la simultanéité, fermer/réouvrir Excel. |
#BLOCKED! | Données connectées bloquées (Centre de gestion de la confidentialité, stratégie, absence de session). | Vérifier compte Microsoft 365 connecté, paramètres de confidentialité/fiabilité, autorisations d’accès réseau. |
#N/A | Ticker invalide/ambigü ou trous de données. | Normaliser le symbole (suffixes de marché), tester une autre période ou source. |
#VALUE! | Arguments incohérents (dates, intervalle, types). | Valider chaque paramètre avec un exemple minimal dans un classeur vierge. |
Concevoir des classeurs « tolérants à la panne »
- Feuille tampon : centralisez tous les appels
STOCKHISTORY()
dans une feuille dédiée (peu de formats) puis référencez ces résultats dans les tableaux de bord. Si une erreur survient, elle n’inonde pas toutes vos feuilles. - Instantanés : pour les clôtures historiques « figées », remplacez par Valeurs quand vous avez validé un lot. Réservez le
live
aux zones analytiques. - LAMBDA enveloppe : une fonction personnalisée qui applique systématiquement
IFERROR()
, tronque les périodes et ne renvoie que les colonnes utiles. - Segmentation : par indice, par secteur, par trimestre. Chaque segment tient dans un classeur autonome ; vous réduisez la faillite « en cascade ».
Quand envisager un plan B
Si votre activité exige une disponibilité 24/7, prévoyez une solution d’appoint :
- Power Query : importer depuis une API boursière de votre choix (clé & conformité à vérifier), avec rafraîchissement planifié et gestion des erreurs dans les étapes M.
- Add‑ins spécialisés : solutions tierces packagées pour Excel, avec support et SLA spécifiques.
- Google Sheets (fonction GOOGLEFINANCE) comme secours sur des jeux de données limités.
Ces approches ne sont pas exemptes de limites, mais elles réduisent le risque opérationnel pendant les périodes d’instabilité du service d’origine.
Suivre l’état du service et dialoguer avec Microsoft
- Surveillance : en cas de réapparition, consultez le tableau de bord d’intégrité de Microsoft 365 (rubrique « Excel ») et la communauté technique pour vérifier s’il s’agit d’un incident public documenté.
- Signalement : Fichier ▸ Aide ▸ Commentaires ▸ « Je n’aime pas quelque chose ». Ce canal est lu par l’équipe produit ; fournissez des détails utiles (canal, build, système, reproductions, captures).
Bonnes pratiques de mise à jour
Pour réduire l’exposition aux incidents déjà corrigés :
- Ouvrez Fichier ▸ Compte et contrôlez Version/Build et Canal.
- Choisissez Options de mise à jour ▸ Mettre à jour maintenant.
- Si votre service IT gère les canaux, demandez l’accès à une build récente (par ex. une version publiée fin août/début septembre 2024 ou ultérieure).
Checklist express avant mise en production
- Tester en classeur vierge tout appel critique (
STOCKHISTORY()
seul, période courte, propriétés minimales). - Mode manuel activé durant vos sessions de développement et de tests de charge.
- Segmentation : pas plus de quelques dizaines de requêtes simultanées par classeur en phase critique.
- Mesures de repli prêtes (Copier ▸ Collage spécial ▸ Valeurs) si la qualité de service se dégrade pendant une réunion ou un rendu client.
Chronologie synthétique
- Début août 2024 : premières séries de « ne se rafraîchit plus ».
- Mi‑août 2024 : montée des
#CONNECT!
, parfois 3–5 % de symboles affectés de manière aléatoire. - Fin août 2024 : mises à jour de Microsoft 365 (série 2408) et premières améliorations chez certains, sans résolution universelle.
- Septembre 2024 → 2025 : incidents ponctuels récurrents signalés (variabilité, trous de données, pics d’erreurs), selon charge et canaux.
En résumé
La vague d’erreurs #CONNECT!
/#CALC!
provient avant tout d’interruptions et de lenteurs côté service de données sur lequel s’appuie STOCKHISTORY()
. Aucun correctif local ne peut garantir le succès quand le fournisseur est défaillant ; en revanche, vous pouvez réduire fortement l’impact en :
- attendant et recalculant à la demande ;
- diminuant la charge (colonnes/intervalle/volume) ;
- recréant vos formules dans un classeur propre ;
- mettant à jour vers une build récente ;
- préparant un plan B (Power Query/API ou add‑in).
Adoptez une architecture « tolérante à la panne »: centraliser les appels, segmenter, et prévoir des instantanés. Vous conserverez des tableaux de bord fiables même quand la couche de données traverse des turbulences.