La plage utilisée par Excel a des colonnes entières

Je traite de nombreux fichiers Excel et je rencontre souvent des classeurs très volumineux pour les données qu'ils contiennent, ou des feuilles de calcul très lentes lors du défilement. En chemin, j'ai appris que cela était souvent dû à un UsedRange excessivement grand, et c'est l'une des premières choses que je vérifie à ces occasions.

Si je trouve que la feuille de calcul a en effet un grand UsedRange (en appuyant sur ctrl + fin), j'essaie certaines choses. Je termine toujours chaque option en sélectionnant la cellule A1, en enregistrant le classeur, puis en fermant Excel. Et puis j'espère voir (dans le gestionnaire de fichiers) que la taille du fichier est en effet réduite. Si ce n'est pas le cas, j'ouvre à nouveau le fichier, je confirme que la plage utilisée est en effet aussi grande qu'avant et j'essaie la prochaine chose sur la liste.

Voici les choses que j'essaie:

  • Je sélectionne la section de lignes entières (ou de colonnes, ou les deux par conséquent) inutilisée et clique avec le bouton droit -> supprimer. Fait l'affaire dans 95% des cas.
  • Si ça ne marche pas, je doublez et "tout effacer" (onglet accueil -> effacer -> tout effacer) les lignes utilisées et supprimez toute la mise en forme conditionnelle de la feuille entière, puis supprimez à nouveau les lignes inutilisées.
  • Si j'échoue toujours, je vais à VBA, faites ActiveSheet.UsedRange dans la fenêtre immédiate pour forcer un "recalcul" de la plage utilisée. Si cela ne fonctionne pas, j'essaie à nouveau, mais après avoir supprimé les lignes et / ou les colonnes inutilisées.

Maintenant, j'ai un classeur sur les mains, qui ne réduit pas sa taille même après le dernier tour. Il y a un nombre excessif de lignes (à savoir: toutes) utilisées. J'ai remarqué à partir de VBA qu'apparemment des colonnes entières sont utilisées, car ActiveSheet.UsedRange.Address a la valeur $A:$EM - pas de numéros de ligne !

C'est en effet nouveau pour moi, alors j'ai essayé des choses plus extrêmes:

  • J'ai supprimé toute la mise en forme de la feuille (en cliquant en haut à gauche, puis dans l'onglet accueil -> effacer -> effacer les formats), ainsi que les hyperliens, les commentaires et les notes (dans le même menu déroulant). Suivi d'un suppression de toutes les lignes inutilisées.
  • J'ai fait la même chose, mais après avoir sélectionné le style "normal" pour la feuille entière et désactivé toutes les cellules.
  • J'ai dégelé les vitres (je suis désespéré ici les gens).

La feuille ressemble maintenant plus à un fichier texte qu'à une feuille de calcul, mais elle fait toujours 3 Mo (pour 42 x 142 cellules), et la plage utilisée selon excel (et VBA) est toujours la même (ou presque, c'est $A:$EL maintenant).

Y a-t-il d'autres choses que je peux faire?

Merci beaucoup!

PS - Je suis sur Office 365 ProPlus, Build 12430.20184 Cliquez pour exécuter


Deux commentaires supplémentaires qui pourraient être intéressants :

D) Je me suis assuré que le problème était vraiment cette feuille:

  • J'ai supprimé toutes les autres feuilles du fichier. (J'ai vérifié les feuilles très cachées.)
  • J'ai supprimé toutes les plages nommées dans le classeur.
  • Il n'y a pas de modules ou de formulaires VBA attachés au classeur.
  • Et, de manière plus convaincante: si j'ajoute une nouvelle feuille de calcul avec à peu près la même quantité de données et que je supprime la feuille incriminée, la taille du fichier tombe à quelques 10 Ko.

D) Et aussi, je mentionnerai une chose que fait fonctionner : sélectionnez ce que je pense être la plage utilisée, copiez-la et collez-la sur une nouvelle feuille de calcul (vierge). Cependant, cela a ses propres inconvénients qui me rendent réticent à l'utiliser. À savoir, toutes les références doivent être remplacées par la nouvelle feuille. Cela comprend (mais pourrait ne pas être limité à...(et c'est le problème principal)):

  • toutes les références dans les cellules d'autres feuilles de calcul. Ceux-ci peuvent être trouvés par "recherche et remplacement" de "feuille de travail originale!"avec "new_worksheet!";
  • toute utilisation dans des formules pour des plages nommées;
  • toute utilisation dans la mise en forme conditionnelle;
  • utiliser dans le code VBA, en fonction de la façon dont la feuille est référencée.

Aussi, tous les objets (comme les graphiques, les éléments de contrôle (boîtes déroulantes, etc.), et, surtout: tableaux) sur la feuille de calcul d'origine seront renommés, de sorte que les points ci-dessus s'appliquent également à ceux-ci. En bref, je ne veux pas emprunter cette voie si je peux éventuellement l'éviter, car c'est beaucoup de travail, et j'ai peur de ne pas trouver toutes les références qui doivent être modifiées, et ainsi de visser mon classeur lors de la suppression de la feuille de calcul d'origine. De plus, je suis curieux et (maintenant) investi dans la recherche de la cause réelle.

vba
demandé sur