Largeur colonnes automatique très lent

Bonjour,

Sauriez vous pour, sur une feuille de 40 colonnes et 450 lignes (donc pas énorme)

le code suivant met plus d'une minute (65") à s'exécuter ?

Je souhaite simplement une fois la feuille remplie régler automatiquement la largeur des colonnes...

Ça fonctionne, mais je trouve que c'est TRÈS long..

Sub Largeur_Colonnes()
With Sheets("dep_col")
      .Columns("A:AF").EntireColumn.AutoFit
End With
End Sub

Y aurait il un moyen plus rapide pour effectuer cette action ?

Merci

Bonjour,

Il doit y avoir une autre raison à cette lenteur ! J'ai testé ton code sur bien plus de lignes et de colonnes que toi et le résultat est "quasi" instantané !!

Cordialement,

Vbabeginner

Bonsoir BastLat,

pareil, moins de colonnes mais près de 800 lignes en un claquement de doigts!

Mais, merci pour le code! Je cherchais ce truc depuis ce matin!

Désolé de ne pouvoir t'aider!

A+

Bonsoir,

C'est peut être a cause du rafraichissement de l'affichage. "Application.ScreenUpdating = "

    Sub Largeur_Colonnes()
Application.ScreenUpdating = False
    With Sheets("dep_col")
          .Columns("A:AF").EntireColumn.AutoFit
    End With
Application.ScreenUpdating = True
    End Sub

Bon courage, je n'aurais pas d'autres propositions

Cdt

Circus

Edit : Je viens testé en créant des valeurs A1:X16500, sans "Application.ScreenUpdating = "

En effet c'est rapide !

Il y a un macro sur la feuille qui s'exécute lors d'un changement ou autre ?

VBABEGINNER a écrit :

Bonjour,

Il doit y avoir une autre raison à cette lenteur ! J'ai testé ton code sur bien plus de lignes et de colonnes que toi et le résultat est "quasi" instantané !!

Cordialement,

Vbabeginner

Effectivement, j'ai fait le même test, et c'est quasiment instantané.

Peut être est ce dû au fait que les cellules ont des formats différents (nombres, textes, dates),

ou que certaine ont des listes déroulantes.

Je testerai ça demain.

Merci de ta réponse


curulis57 a écrit :

Mais, merci pour le code! Je cherchais ce truc depuis ce matin!

De rien !

Pour une fois que c'est moi qui peux aider !


Circus a écrit :

C'est peut être a cause du rafraîchissement de l'affichage. "Application.ScreenUpdating = "

Déjà activé, mais sans changement..
Circus a écrit :

Il y a un macro sur la feuille qui s'exécute lors d'un changement ou autre ?

Oui, j'ai d'autres macros sur cette feuille, mais là je ne teste que celle là.

Merci de ta réponse

Bonsoir,

Sans ton fichier ça risque d'être compliqué de t'aider.

Cdt

Circus

Edit : Quelques F8 (pas à pas) sur la macro pourront t’aider peut-être

Bonjour,

beaucoup de formules ? Essaie de les optimiser. Les matricielles sont très gourmandes...

Un clic sur un séparateur de ligne ou de colonne est une 'action volatile' (même sens qu'une fonction volatile) qui entraine un recalcul.

Passe en calcul manuel avant, et remet le auto après. Le recalcul devra se faire après de toute façon, éventuellement plus court. Met aussi screenupdating=false.

eric

Circus a écrit :

Bonsoir,

Sans ton fichier ça risque d'être compliqué de t'aider.

je sais bien Circus, mais ma feuille est remplie de donnée du boulot, et je ne peux pas la diffuser.

Par contre si je recrée une feuille d'une taille double de celle là (lignes / colonnes) pour tester, le résultat est quasi immédiat.

Ça ne sert donc à rien de la poster, et ça prouve bien que c'est lié au contenu... mais pourquoi ?...

Circus a écrit :

Edit : Quelques F8 (pas à pas) sur la macro pourront t’aider peut-être

Et bien non justement, car c'est précisément avec F8 lorsque j'arrive sur " .Range("A:AF").Columns.AutoFit" dans...
Sub Largeur_Colonnes()
With Sheets("dep_col")
    .Range("A:AF").Columns.AutoFit
End With
End Sub

...que le sablier apparaît pendant plus d'une minute avant de disparaître avec les largeurs des colonnes réglées...


eriiic a écrit :

beaucoup de formules ? Essaie de les optimiser. Les matricielles sont très gourmandes...

Non eriiic, j'ai dit que j'avais beaucoup de macros sur cette page, mais il n'y a aucune formule sur la feuille.

Il n'y a sur cette feuille que des données (texte/nombres)

J'ai d'ailleurs supprimé toutes les macros pour ne conserver que celle là, et ça rame toujours.

eriiic a écrit :

Un clic sur un séparateur de ligne ou de colonne est une 'action volatile' (même sens qu'une fonction volatile) qui entraine un recalcul. Passe en calcul manuel avant, et remet le auto après. Le recalcul devra se faire après de toute façon, éventuellement plus court.

Je vais chercher dans ce sens demain... Mais je ne connais pas..

C'est vrai que j'ai créé la macro en regardant ce que donne un double clic sur une colonne.

Y aurait il une autre commande en VBA pour régler la largeur auto des colonnes ?

eriiic a écrit :

Met aussi screenupdating=false.

Fait. On /Off / Viré, même résultat.

Merci pour vos réponses.

Bonjour,

Copie tes données dans un classeur neuf et teste, pour voir si ton classeur ne c'est pas vérolé.

eric

eriiic a écrit :

Bonjour,

Copie tes données dans un classeur neuf et teste, pour voir si ton classeur ne c'est pas vérolé.

eric

idem

merci pour la piste..


Je viens de résoudre mon problème !

Cette feuille est un copier/coller d'une feuille d'un autre classeur.

J'ai fait un copier/collage spécial... Uniquement les valeurs,

et le temps de traitement pour les largeurs est devenu quasi instantané.

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Je perds la mise en forme des entêtes de colonnes, mais une macro me permet de la récupérer rapidement.

Merci pour toutes vos réponses

Super! Je note l'info!

A+

curulis57 a écrit :

Super! Je note l'info!

A+

MEF ! Ça flingue les formats "date" aussi, et il faut tout remettre au format.

Mais malgré ça, le gain de temps est fantastique (dans mon cas...)

Rechercher des sujets similaires à "largeur colonnes automatique tres lent"