mygems

Pourquoi Excel plante sur les gros fichiers, et que faire à la place

Ne répond pas, gelé au défilement, mort à l'enregistrement. La cause est souvent la mémoire, le recalcul ou la mise en forme, pas le nombre de lignes. Comment trancher.

Par uos ·

Excel plante très rarement parce qu'un fichier a trop de lignes. Il plante à cause de ce qu'il y a sur ces lignes.

Une feuille de 900 000 lignes de simples valeurs s'ouvre sans problème sur un portable de 2015. Une feuille de 40 000 lignes avec une mise en forme conditionnelle sur des colonnes entières, quelques milliers de RECHERCHEV (VLOOKUP) et un cache de tableau croisé dynamique bloquera la même machine pour de bon. Le nombre de lignes, c'est ce qu'on remarque ; ce n'est presque jamais la cause.

La bonne question est donc laquelle des cinq causes est la vôtre, car elles n'ont pas les mêmes remèdes, et quatre d'entre eux prennent moins d'une minute.

Les cinq causes, de la plus à la moins probable

1. Excel manque de mémoire (et vous êtes peut-être en 32 bits)

Excel charge tout le classeur en RAM, plus la chaîne de calcul, l'historique d'annulation et un cache par tableau croisé dynamique, souvent plusieurs fois la taille du fichier sur le disque.

Vérifiez d'abord votre version : Fichier → Compte → À propos d'Excel. Si la première ligne indique 32 bits, Excel est plafonné à environ 2 Go de mémoire quelle que soit la quantité dont dispose la machine, et c'est votre réponse. Microsoft a livré le 32 bits par défaut pendant des années, et beaucoup d'installations n'ont jamais été migrées. Réinstaller en 64 bits est, pour ceux que ça concerne, le correctif le plus rentable de cette page.

Le signe d'un problème de mémoire : « Excel ne peut pas terminer cette tâche avec les ressources disponibles », ou un plantage précisément à l'enregistrement ou à l'ouverture d'un deuxième classeur.

2. Des formules volatiles recalculent tout, en permanence

Certaines fonctions se recalculent à chaque modification n'importe où dans le classeur, pas seulement quand leurs arguments changent. NOW() (MAINTENANT), TODAY() (AUJOURDHUI), RAND() (ALEA), OFFSET() (DECALER), INDIRECT(), INFO() et CELL() (CELLULE) sont les fonctions volatiles, et chacune entraîne avec elle tout ce qui en dépend.

INDIRECT() est le coupable habituel d'un classeur lent, et OFFSET() celui d'un classeur devenu inutilisable. Quelques centaines de l'une ou l'autre sur une grande feuille suffisent pour que chaque frappe déclenche un recalcul complet.

Diagnostic en dix secondes : Formules → Options de calcul → Manuel. Si le classeur redevient réactif aussitôt, le problème était le recalcul, pas la taille.

Les remèdes, par ordre de préférence : remplacer OFFSET/INDIRECT par INDEX, remplacer VLOOKUP sur une colonne entière par INDEX/MATCH ou XLOOKUP sur une plage bornée, et ne jamais référencer A:A quand A1:A50000 suffit. Une référence de colonne entière, c'est un balayage d'un million de cellules par formule.

3. Une mise en forme appliquée à des colonnes entières

Sélectionnez la colonne A, appliquez une mise en forme conditionnelle ou une couleur de remplissage, et Excel peut stocker l'état de mise en forme d'un million de cellules. Faites-le sur une douzaine de colonnes et le fichier gonfle. Les classeurs de 40 Mo contenant 5 000 lignes de données sont courants, et ils s'ouvrent comme s'ils en contenaient un million.

Deux signes :

  • Ctrl+Fin saute à un endroit absurde (ligne 900 000, colonne BZ) alors que vos données s'arrêtent à la ligne 5 000. C'est la plage utilisée, et Excel alloue de la mémoire en fonction d'elle.
  • Le fichier est énorme par rapport à son contenu.

Le remède : sélectionnez toutes les lignes sous vos données jusqu'en bas, supprimez les lignes (pas seulement le contenu), faites pareil pour les colonnes à droite, enregistrez, fermez, rouvrez. Ctrl+Fin devrait maintenant atterrir sur la vraie dernière cellule. Réappliquez ensuite la mise en forme conditionnelle à la plage réelle plutôt qu'à des colonnes entières.

4. Un cache par tableau croisé dynamique

Chaque tableau croisé dynamique stocke sa propre copie des données sources, sauf s'il partage explicitement un cache avec un autre. Cinq tableaux croisés sur une source de 200 000 lignes, c'est un million de lignes dupliquées en cachette dans le fichier.

Le remède : créez les tableaux croisés supplémentaires en copiant un tableau existant plutôt qu'en repartant de la source, car les copies partagent le cache. Et dans les Options du tableau croisé dynamique, désactivez « Enregistrer les données sources avec le fichier » quand c'est possible.

5. C'est bien le nombre de lignes, finalement

Si le fichier est un CSV de plusieurs millions de lignes, rien de ce qui précède ne s'applique. Excel contient 1 048 576 lignes par feuille, et c'est structurel. Il ne plantera pas, à proprement parler ; il chargera ce qui rentre et s'arrêtera, ce qui est pire. Comment ouvrir un gros fichier CSV qu'Excel n'ouvre pas est le guide dédié à ce cas, et comment ouvrir un fichier CSV de 1 Go compare ce qui sait le gérer à la place.

Trouver laquelle est la vôtre

Deux minutes, dans cet ordre :

  1. Fichier → Compte → À propos d'Excel. 32 bits ? Arrêtez-vous là ; c'est le correctif.
  2. Ctrl+Fin. Atterrit bien après vos données ? Cause 3.
  3. Formules → Options de calcul → Manuel. Réactif maintenant ? Cause 2.
  4. Comparez la taille du fichier à son contenu. Un fichier de 30 Mo avec 8 000 lignes relève de la cause 3 ou 4.
  5. Rien de tout ça, et le fichier compte des millions de lignes ? Cause 5. Excel est le mauvais outil ici, pas un outil cassé.

Écartez les compléments séparément. Lancez Excel avec excel /safe. Si le classeur se comporte normalement, c'est un complément qui posait problème, et le reste n'a plus d'importance.

Que faire à la place

Si c'est un fichier de données plutôt qu'un document. Ce qui met les gens en difficulté, c'est d'utiliser un tableur comme base de données : des centaines de milliers de lignes, des colonnes de formules calculées sur toutes, un tableau croisé par-dessus. Cette charge de travail demande un moteur de requêtes :

duckdb -c "SELECT region, SUM(amount) FROM 'export.csv' GROUP BY region"

DuckDB répond en environ une seconde à ce qu'Excel met deux minutes et un blocage à faire, et la syntaxe est plus simple qu'un SUMIFS imbriqué. Une explication plus complète se trouve dans exécuter des requêtes SQL sur un CSV sans base de données.

Si vous devez rester dans Excel. Power Query (Données → Obtenir des données) traite le fichier entier et ne dépose que le résumé dans une feuille : des millions de lignes n'occupent jamais une feuille de calcul. Le modèle de données gère plus de lignes qu'une feuille ne peut en contenir et permet de faire tourner des tableaux croisés directement dessus.

Si vous voulez juste lire le fichier. Ouvrir un fichier de données dans un outil qui le traite comme des données plutôt que comme un document élimine les cinq causes d'un coup :

CSV File Viewer - Smart CSViPhone et iPad · Android

Lit le fichier au lieu de l'importer : pas de recalcul, pas d'état de mise en forme, pas de cache de tableau croisé. SQL ou questions en langage courant sur les valeurs telles qu'elles sont écrites.

Ce que ça fait

Deux habitudes qui évitent l'essentiel

Séparez les valeurs de la présentation. Une feuille de données brutes sans mise en forme ni formules, une feuille d'analyse qui s'y réfère. La plupart des classeurs catastrophiques sont une seule feuille qui fait les trois métiers.

Référencez des plages, pas des colonnes. A1:A50000 au lieu de A:A, partout. C'est l'habitude qui pèse le plus sur la capacité d'un classeur à rester utilisable en grossissant.

Questions

Pourquoi Excel affiche-t-il sans cesse « ne répond pas » sur un gros fichier ?
Le plus souvent à cause du recalcul plutôt que de la taille. Les fonctions volatiles (DECALER, INDIRECT, MAINTENANT, AUJOURDHUI, ALEA) se recalculent à chaque modification n'importe où dans le classeur, et les références de colonnes entières comme A:A font balayer un million de cellules à chaque formule. Passez en Formules → Options de calcul → Manuel ; si Excel redevient réactif aussitôt, c'était la cause.
Mon Excel est-il en 32 bits, et est-ce important ?
Vérifiez dans Fichier → Compte → À propos d'Excel. Une version 32 bits est plafonnée à environ 2 Go de mémoire, quelle que soit la RAM de la machine, donc elle échoue sur des classeurs qu'une version 64 bits gère sans effort. Microsoft a livré le 32 bits par défaut pendant des années, et beaucoup d'installations y sont encore. Réinstaller en 64 bits est le plus gros correctif pour ceux que ça concerne.
Pourquoi mon fichier Excel est-il si volumineux alors qu'il contient si peu de données ?
Presque toujours à cause d'une mise en forme appliquée à des colonnes entières, ce qui pousse Excel à stocker l'état d'un million de cellules par colonne. Appuyez sur Ctrl+Fin : si le curseur saute bien au-delà de vos vraies données, c'est la plage utilisée gonflée. Supprimez les lignes et colonnes vides après vos données, enregistrez, fermez et rouvrez.
Excel plante-t-il à cause de la limite de 1 048 576 lignes ?
Non. Cette limite ne provoque pas de plantage. Excel charge les lignes qui rentrent et s'arrête, souvent sans avertissement clair, ce qui est plus dangereux qu'un plantage car les totaux que vous lisez ensuite sont faux sans que ça se voie. Les plantages et blocages viennent plutôt de la mémoire, du recalcul, de la mise en forme ou des caches de tableaux croisés.
Comment empêcher les tableaux croisés dynamiques de gonfler un classeur ?
Chaque tableau croisé garde sa propre copie des données sources sauf s'il partage un cache. Créez les nouveaux tableaux croisés en copiant un tableau existant plutôt qu'en repartant de la source, et désactivez « Enregistrer les données sources avec le fichier » dans les Options du tableau croisé dynamique quand votre façon de travailler le permet.
Que faut-il utiliser à la place d'Excel pour les gros fichiers de données ?
Pour interroger les données, DuckDB lit un CSV sur place en environ une seconde, sans étape d'import. Pour rester dans Excel, Power Query et le modèle de données traitent bien plus de lignes qu'une feuille ne peut en contenir et ne déposent que le résumé dans la feuille. Pour simplement lire un gros fichier, utilisez une visionneuse qui le traite comme des données plutôt que comme un document.

uos — Développe CSV Editor et Smart CSV Viewer, et a passé plus de temps que prévu à chercher quelle partie d'un classeur faisait le dégât.