web-dev-qa-db-fra.com

Moyen le plus rapide pour effacer tout le contenu de la feuille VBA

J'ai une grande feuille dont je dois effacer tout le contenu. Lorsque j'essaie simplement de l'effacer sans VBA, il passe en mode ne répondant pas. Lorsque vous utilisez une macro telle que:

Sub ClearContents ()
 Application.Calculation = XlManual
 Application.ScreenUpdating = False

  Sheets("Zeroes").Cells.ClearContents

 Application.ScreenUpdating = True
End Sub

Il ne répond pas non plus. Quel est le moyen le plus rapide de faire cela?

42
hc91

La plage .Cells n'est pas limitée à celles qui sont utilisées. Par conséquent, votre code efface le contenu de 1 048 576 lignes et de 16 384 colonnes, soit 17 179 869 184 cellules au total. Cela va prendre un moment. Il suffit d'effacer le UsedRange à la place:

Sheets("Zeros").UsedRange.ClearContents

Vous pouvez également supprimer la feuille et l'ajouter de nouveau:

Application.DisplayAlerts = False
Sheets("Zeros").Delete
Application.DisplayAlerts = True
Dim sheet As Worksheet
Set sheet = Sheets.Add
sheet.Name = "Zeros"
81
Comintern

Techniquement, et d'après la solution de contournement acceptée par Comintern, je pense que vous souhaitez réellement supprimer toutes les cellules de la feuille. Ce qui supprime le formatage (voir note de bas de page pour les exceptions), etc. ainsi que le contenu des cellules. C'est à dire. Sheets("Zeroes").Cells.Delete

Combiné également à UsedRange, ScreenUpdating et Calculation ignoré devrait être presque intantané:

Sub DeleteCells ()
    Application.Calculation = XlManual
    Application.ScreenUpdating = False
    Sheets("Zeroes").UsedRange.Delete
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
End Sub

Ou si vous préférez respecter l'état de calcul, Excel est actuellement dans:

Sub DeleteCells ()
    Dim SaveCalcState
    SaveCalcState = Application.Calculation
    Application.Calculation = XlManual
    Application.ScreenUpdating = False
    Sheets("Zeroes").UsedRange.Delete
    Application.ScreenUpdating = True
    Application.Calculation = SaveCalcState
End Sub

Note de bas de page: Si le formatage a été appliqué à colonne entière, il n'est pas supprimé. Cela inclut la couleur de la police, la couleur de remplissage et les bordures, la catégorie de format (comme Général, Date, Texte, etc.) et peut-être aussi d'autres propriétés, mais

Formatage conditionnel IS supprimé, tel quel format complet formatage.

(La colonne entière le formatage est très utile si vous importez plusieurs fois des données brutes dans une feuille, car elles seront conformes aux formats utilisés à l'origine si une importation simple de type coller uniquement (valeurs collées) est effectuée.)

11
Stax

Vous pouvez utiliser la méthode .Clear:

Sheets("Zeros").UsedRange.Clear

En utilisant cela, vous pouvez supprimer le conten et le mise en forme d'une cellule ou d'une plage sans affecter le reste de la feuille de calcul.

5
Jones

Essaye celui-là:

Sub clear_sht
  Dim sht As Worksheet
  Set sht = Worksheets(GENERATOR_SHT_NAME)
  col_cnt = sht.UsedRange.Columns.count
  If col_cnt = 0 Then
    col_cnt = 1
  End If

  sht.Range(sht.Cells(1, 1), sht.Cells(sht.UsedRange.Rows.count, col_cnt)).Clear
End Sub
0
Zernel