XL 2019 Supprimer contenu plage selon condition

KTM

XLDnaute Impliqué
Bonjour chers tous
je voudrais une macro simple qui va vider ma table sauf les données des colonnes "PERTE"
merci .
 

Pièces jointes

  • Classeur1.xlsm
    14.8 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonsoir KTM,

En supposant que la position des colonnes ne changera jamais c'est simple :
VB:
Sub suppr()
Intersect(Rows("3:" & Rows.Count), Range("A:B,D:H,J:N,P:R")).ClearContents
End Sub
Sinon bien sûr il faut une boucle pour effacer les colonnes sans l'en-tête "PERTE".

A+
 

KTM

XLDnaute Impliqué
Bonsoir KTM,

En supposant que la position des colonnes ne changera jamais c'est simple :
VB:
Sub suppr()
Intersect(Rows("3:" & Rows.Count), Range("A:B,D:H,J:N,P:R")).ClearContents
End Sub
Sinon bien sûr il faut une boucle pour effacer les colonnes sans l'en-tête "PERTE".

A+
Merci Job75
votre méthode avec la boucle , si vous acceptez de me la proposer sera idéale. Ma table se limite a la ligne 30.
Encore merci.
 

job75

XLDnaute Barbatruc
Bonjour KTM, riton00, le forum,
votre méthode avec la boucle , si vous acceptez de me la proposer sera idéale.
Je la propose :
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
A+
 

job75

XLDnaute Barbatruc
Une solution sans boucle donc bien plus rapide s'il y a beaucoup de 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
Testé sur un tableau (vide) de 14 400 colonnes :

- macro du post #5 => 1,6 seconde et 0,81 seconde avec Application.ScreenUpdating = False

- cette macro => 0,20 seconde.
 

KTM

XLDnaute Impliqué
Une solution sans boucle donc bien plus rapide s'il y a beaucoup de 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
Testé sur un tableau (vide) de 14 400 colonnes :

- macro du post #5 => 1,6 seconde et 0,81 seconde avec Application.ScreenUpdating = False

- cette macro => 0,20 seconde.
super !!!
Une solution sans boucle donc bien plus rapide s'il y a beaucoup de 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
Testé sur un tableau (vide) de 14 400 colonnes :

- macro du post #5 => 1,6 seconde et 0,81 seconde avec Application.ScreenUpdating = False

- cette macro => 0,20 s
 

Discussions similaires

Réponses
11
Affichages
424
Réponses
4
Affichages
361
Réponses
10
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
313 997
Messages
2 104 363
Membres
109 009
dernier inscrit
BLONDINTHEONE