Microsoft 365 Supprimer ligne si cellule différente d'une valeur numérique et si vide

pierrof

XLDnaute Occasionnel
Bonjour,

Dans mon nouveau projet, j'aimerais à l'aide d'une macro supprimer les lignes de mon tableau (tableau pouvant atteindre 15000 lignes) si la valeur de la cellule A n'est pas un nombre ou si elle est vide.

Je laisse un fichier exemple.

Merci d'avance de votre aide.

Cordialement
 

Pièces jointes

  • Supprimer _lignes.xlsm
    14.7 KB · Affichages: 4
Solution
Re

=>Phil
J'ai donc ouvert ta PJ

Donc sur la base du fichier de Phil basé sur ma base
(oui je sais cela fait beaucoup de base ;))
Je change mon fusil d'épaule
et je propose cette autre façon de faire
VB:
Sub Suppr_ALPHA_VIDE()
Dim l&, r As Range
Application.ScreenUpdating = False
l = ActiveSheet.UsedRange.Rows.Count
Columns("A:N").Sort key1:=Cells(2), Order1:=xlDescending, Header:=xlYes
Set r = Range("N2:N" & l)
r.FormulaR1C1 = "=IF(OR(ISTEXT(RC[-13]),ISBLANK(RC[-13])),""Staple"",1)"
r = Range("N2:N" & l).Value
r.SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Columns(14).Clear
End Sub
PS; je te laisse tester sur 15000 lignes
(car mon PC n'est point véloce)
;)

Staple1600

XLDnaute Barbatruc
Re

Ce qui donnerait en VBA
Code:
Sub Macro1()
Application.ScreenUpdating = False
Columns("A:A").SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Range(Cells(1), Cells(Rows.Count, 1).End(3)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Maintenant, sur 15000 lignes, cela risque de faire tousser Excel ;)

Mais d'autres viendront qui te proposeront des solutions plus évoluées ;)

EDITION: Ce n'est pas encore un autre, ce n'est que moi
Cette version est un peu plus rapide
(j'ai testé sur 5000 lignes)
VB:
Sub Macro2()
Application.ScreenUpdating = False
Columns("A:A").Sort key1:=Cells(1), Order1:=xlDescending, Header:=xlNo
Columns("A:A").SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
End Sub
 
Dernière édition:

pierrof

XLDnaute Occasionnel
Bonjour Staple 1600,

Merci pour ce code, juste une petite question la ligne des entêtes de colonne est supprimer aussi avec le code comme faire pour ne pas la supprimer?

Sub Macro1()
Application.ScreenUpdating = False
Columns("A:A").SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Range(Cells(1), Cells(Rows.Count, 1).End(3)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Merci encore.

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re

Comme ceci, je suppose ;)
VB:
Sub Macro3()
Application.ScreenUpdating = False
Columns("A:A").Sort key1:=Cells(1), Order1:=xlDescending, Header:=xlYes
Range(Cells(2, 1), Cells(Rows.Count, 1).End(3)).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour Phil69970

J'ai une petite requete
T'est-il possible quand tu publies une solution de publier le code VBA dans le corps du message en plus de la PJ ?
(Cela m'évite de stocker la multitude de fichiers exemple d'XLD)
Et comme dans ce message, tu pars sur ma base, j'aimerais voir à quoi ressemble ton code ;)
Merci.
 

Phil69970

XLDnaute Barbatruc
Re

Voici le code VBA

VB:
Sub Supprime()
Application.ScreenUpdating = False
Dim Derlig&
Derlig = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
Columns("A:A").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
[A2] = 1: Range("A2:A" & Derlig).DataSeries
Columns("A:N").Sort key1:=Cells(2), Order1:=xlDescending, Header:=xlYes
Range("B2:B" & Derlig).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Range("B2:B" & Derlig).SpecialCells(xlCellTypeBlanks, 4).EntireRow.Delete
Columns("A:N").Sort key1:=Cells(1), Order1:=xlAscending, Header:=xlYes
Columns("A:A").Delete
End Sub

Private Sub CommandButton1_Click()
Supprime
End Sub

Pour info 0.13s pour 15 000 lignes avec 10 000 lignes supprimées sur mon PC

@Phil69970
 

Staple1600

XLDnaute Barbatruc
Re

Merci
Normalement, si on fait le tri, plus besoin de supprimer les lignes vides car elles retrouvent en fin de tableau.
Je ne comprends pas l'ajout de la colonne et le Dataseries
Il faudrait peut-être que j'ouvre ta PJ pour comprendre ;)
Ce qui ruinerait mon plan d'économie d'octets ;)
(cf mon message précédent)

PS: Je me suis basé sur ce seul critère
si la valeur de la cellule A n'est pas un nombre ou si elle est vide.
Donc je n'occupe que la colonne A, et peut importe ce qu'il à droite de la colonne A, non ?
puisque on supprime des lignes entières ?
Damned! Mais oui, c'est tout le tableau qu'il faut trier.

Bon bah, je vais télécharger ta PJ.
 

Staple1600

XLDnaute Barbatruc
Re

=>Phil
J'ai donc ouvert ta PJ

Donc sur la base du fichier de Phil basé sur ma base
(oui je sais cela fait beaucoup de base ;))
Je change mon fusil d'épaule
et je propose cette autre façon de faire
VB:
Sub Suppr_ALPHA_VIDE()
Dim l&, r As Range
Application.ScreenUpdating = False
l = ActiveSheet.UsedRange.Rows.Count
Columns("A:N").Sort key1:=Cells(2), Order1:=xlDescending, Header:=xlYes
Set r = Range("N2:N" & l)
r.FormulaR1C1 = "=IF(OR(ISTEXT(RC[-13]),ISBLANK(RC[-13])),""Staple"",1)"
r = Range("N2:N" & l).Value
r.SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Columns(14).Clear
End Sub
PS; je te laisse tester sur 15000 lignes
(car mon PC n'est point véloce)
;)
 

Phil69970

XLDnaute Barbatruc
Re

0.87s sur les mêmes 15 000 lignes avec les mêmes 10 000 lignes à supprimées sur mon PC

Je pense que remplir les blancs en texte est plus lent que supprimer les blancs directement .....;)
Ou alors "Staple" est trop long à écrire ..... o_O

Après le demandeur choisira si il est à 0.74 s près 🤣🤣 vu de mon PC.

@Phil69970
 

Discussions similaires

Statistiques des forums

Discussions
312 168
Messages
2 085 907
Membres
103 029
dernier inscrit
ndembi sylver