Sub suppr()
Intersect(Rows("3:" & Rows.Count), Range("A:B,D:H,J:N,P:R")).ClearContents
End Sub
Merci Job75Bonsoir KTM,
En supposant que la position des colonnes ne changera jamais c'est simple :
Sinon bien sûr il faut une boucle pour effacer les colonnes sans l'en-tête "PERTE".VB:Sub suppr() Intersect(Rows("3:" & Rows.Count), Range("A:B,D:H,J:N,P:R")).ClearContents End Sub
A+
Je la propose :votre méthode avec la boucle , si vous acceptez de me la proposer sera idéale.
Sub suppr()
Dim Ltitre, col%
Ltitre = 2 'ligne des titres
With Feuil1.UsedRange 'CodeName de la feuille à adapter
For col = 1 To .Columns.Count
If UCase(.Cells(Ltitre, col)) <> "PERTE" Then .Cells(Ltitre + 1, col).Resize(.Rows.Count - Ltitre).ClearContents
Next
End With
End Sub
Sub suppr()
Dim Ltitre
Ltitre = 2 'ligne des titres
Application.ScreenUpdating = False
With Feuil1.UsedRange 'CodeName de la feuille à adapter
.Rows(Ltitre).Replace "PERTE", "", xlWhole
Intersect(.Offset(Ltitre), .Rows(Ltitre).SpecialCells(xlCellTypeConstants).EntireColumn).ClearContents
.Rows(Ltitre).Replace "", "PERTE"
End With
End Sub
super !!!Bonjour KTM, riton00, le forum,
Je la propose :
A+VB:Sub suppr() Dim Ltitre, col% Ltitre = 2 'ligne des titres With Feuil1.UsedRange 'CodeName de la feuille à adapter For col = 1 To .Columns.Count If UCase(.Cells(Ltitre, col)) <> "PERTE" Then .Cells(Ltitre + 1, col).Resize(.Rows.Count - Ltitre).ClearContents Next End With End Sub
super !!!Une solution sans boucle donc bien plus rapide s'il y a beaucoup de colonnes :
Testé sur un tableau (vide) de 14 400 colonnes :VB:Sub suppr() Dim Ltitre Ltitre = 2 'ligne des titres Application.ScreenUpdating = False With Feuil1.UsedRange 'CodeName de la feuille à adapter .Rows(Ltitre).Replace "PERTE", "", xlWhole Intersect(.Offset(Ltitre), .Rows(Ltitre).SpecialCells(xlCellTypeConstants).EntireColumn).ClearContents .Rows(Ltitre).Replace "", "PERTE" End With End Sub
- macro du post #5 => 1,6 seconde et 0,81 seconde avec Application.ScreenUpdating = False
- cette macro => 0,20 seconde.
Une solution sans boucle donc bien plus rapide s'il y a beaucoup de colonnes :
Testé sur un tableau (vide) de 14 400 colonnes :VB:Sub suppr() Dim Ltitre Ltitre = 2 'ligne des titres Application.ScreenUpdating = False With Feuil1.UsedRange 'CodeName de la feuille à adapter .Rows(Ltitre).Replace "PERTE", "", xlWhole Intersect(.Offset(Ltitre), .Rows(Ltitre).SpecialCells(xlCellTypeConstants).EntireColumn).ClearContents .Rows(Ltitre).Replace "", "PERTE" End With End Sub
- macro du post #5 => 1,6 seconde et 0,81 seconde avec Application.ScreenUpdating = False
- cette macro => 0,20 s