XL 2021 Masquer des colonnes plus rapidement qu'avec Selection.EntireColumn.Hidden = True

ESCOUGER2022

XLDnaute Nouveau
Bonjour,
En utilisant la méthode classique "Selection.EntireColumn.Hidden = True" dans une macro pour masquer une ou plusieurs colonnes le temps d'exécution est très long, de l'ordre d'une seconde par colonne.
Sauriez-vous me dire s'il est possible de programmer cela différemment de manière à réduire ce temps ?
J'ai essayé différentes possibilités proposées sur le net telles que "Worksheets("Sheet1").Columns("C").Hidden = True"
ou utiliser la propriété "Range.Hidden = True, mais le temps d'exécution n'est pas réduit.
Merci d'avance de vos réponses
 

Oneida

XLDnaute Impliqué
Bonjour,
Combien de Colonnes?
Un exemple pour 7
VB:
Sub Masquer_Colonnes()
    temps = Timer
    Sheets("feuil1").Range("D:E,H:H,L:M,T:T,V:V").EntireColumn.Hidden = True
    MsgBox Format(Timer - temps, "0.000000")
End Sub
Sub Afficher_Colonnes()
    temps = Timer
    Sheets("feuil1").Range("D:E,H:H,L:M,T:T,V:V").EntireColumn.Hidden = False
    MsgBox Format(Timer - temps, "0.000000")
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Je ne comprends pas pourquoi de devrai mettre ou non un Select et qu'est-ce que ça aurait comme effet sur le temps.
Ca prend un temps fou les .Select !

C'est à bannir. On le dit systématiquement pour les gens qui débutent et ne le savent donc pas.
Mais j'en connais un ici ( salut Arthour ;) ) qui continue de systématiquement mettre des .select suivis de Selection. partout, partout, partout. :(



Salut Oneida ça roule.
Et toi donc ?
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Je l'utilise beaucoup à l'instar d'Arthour!
Dans ce cas, il faut au moins utiliser Application.ScreenUpdating=FALSE, pour ne plus rafraîchir l'affichage pendant le travail de la macro.
Et là, tu gagnes un temps absolument incroyable. Il faut le tester pour le croire. ;)


Mais si, par exemple ,je veux positionner le curseur sur une cellule, quelle est la solution autre que range(adresse).select
Est-ce que Activate ferait la même chose?
Pardon, mais je te répondrai par une question : pourquoi voudrais-tu faire cela ?!? ;)

Je veux dire par-là que si le Select n'est pas absolument nécessaire, alors tu dois absolument t'en passer pour gagner du temps, et aussi de la clarté dans ton code de macro.
Par exemple pour copier une cellule vers une autre cellule, le Select est inutile.

Exemple :
VB:
Sheets("Feuil1").Select
Range("A1").Select
Selection.Copy
sera avantageusement remplacé par
VB:
Sheets("Feuil1").Range("A1").Copy
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Simplement pour mettre le curseur sur une cellule - à la sortie d'une macro - ou le terminaliste devra poursuivre sa saisie.
Là tu t'en fous puisque tu ne le fais qu'une seule fois, donc tu fais ton Select. ;)

Là où c'est important c'est par exemple dans une boucle. Si, à l'intérieur de ta boucle, tu peux éviter le Select, alors tu dois éviter le Select.


Tu vois ce que je veux dire ?
 

Statistiques des forums

Discussions
312 211
Messages
2 086 292
Membres
103 171
dernier inscrit
clemm