Supprimer les lignes en fonction de la valeur d'une cellule

julien 07

XLDnaute Nouveau
Bonjour le forum,

Voilà, je cherche à supprimer les lignes dont la valeur de la colonne B est égale à 0, le nombre de ligne est variable.

J'ai essayé de faire un code mais je dois avouer que je débute et je ne connais pas la syntaxe de VBA, du coup ça ne marche pas.

Merci d'avance pour votre aide.

Julien

Sub supprimer()
'
' supprimer Macro
' Macro enregistrée le 19/03/2008 par julien

'Définition des variables

Dim i As Double

'Selectionner la première cellule de la colonne B

For i = 1 To Activebook.Rows.Count

ActiveCell = ("Bi")

'Si la cellule est =0 alors supprimer la ligne

If ActiveCell = 0 Then Delete Row

'Ligne suivante de la colonne B

i = i + 1

'Fin de traitement si plus de ligne

End If

End Sub
 

wilfried_42

XLDnaute Barbatruc
Re : Supprimer les lignes en fonction de la valeur d'une cellule

bonjour

Code:
For i = range("B65536").end(xlup).row to 1 step -1
     if range("B" & i) = 0 then range("B" & i).entirerow.delete
next i

Pour eviter un traitement trop long, partir de la derniere valeur d'une colonne de reference, dans l'exemple donné, j'ai pris B (dans le for i)

Pour des suppression de ligne aller de la fin vers le debut

Si tu supprimes la ligne 2 (par exemple), la 3 devenant 2 apres suppression, ne sera pas traitée
 

gilbert_RGI

XLDnaute Barbatruc
Re : Supprimer les lignes en fonction de la valeur d'une cellule

Bonjour

avec ce code

Code:
Sub supzéro()
Dim i As Long
    For i = [b65536].End(xlUp).Row To 1 Step -1
        If UCase(Cells(i, 2)) Like 0 Then
            Rows(i).EntireRow.Delete
        End If
    Next
End Sub

Cdlt

RGI
 

Staple1600

XLDnaute Barbatruc
Re : Supprimer les lignes en fonction de la valeur d'une cellule

Bonjour à tous


En utilisant le filtre automatique par VBA


Code:
Sub supprimme_zero()
With Range(Range("B1"), Range("B65536").End(xlUp))
        .AutoFilter Field:=1, Criteria1:="=0"
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub

Cette version est censée s'éxécuter plus rapidement
grâce aux lignes en gras
Code:
Sub supprimme_zero_II()
[B]Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False[/B]
With Range("B1:B" & [B65536].End(xlUp).Row)
    .AutoFilter 1, "=0"
    .SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
[B]Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic[/B]
End Sub

gilbert_RGI: (bonjour) une petite question: pourquoi emploies-tu UCase ?
 
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : Supprimer les lignes en fonction de la valeur d'une cellule

gilbert_RGI: (bonjour) une petite question: pourquoi emploies-tu UCase ?

oups une erreur ce code me sert pour de l'alpha mais tu auras rectifié il fonctionne aussi comme cela

Code:
Sub supzéro()
Dim i As Long
    For i = [B65536].End(xlUp).Row To 1 Step -1
        If Cells(i, 2) Like 0 Then
            Rows(i).EntireRow.Delete
        End If
    Next
End Sub

RGI
 

Ana13007

XLDnaute Nouveau
Bonjour,

Je souhaite créer une macro pour nettoyer une base de données que j’actualise toutes les semaines. Je souhaite supprimer toutes les lignes contenant :
  • « NB » dans la colonne BF,
  • "BEANRU", “DEHAMU", "GBLGPU" et "NLRTMU" dans BH
J’ai fait ces macros en me basant sur des exemples sur le forum mais aucune ne fonctionne. J'ai aussi l'impression que la macro ne s'effectue pas sur la feuille que je souhaite :

VB:
Sub Filtres_NB_WK_Report()
Dim x As Range 'Déclare la variable x -> x = cellule
Set x = Range("BF1:BF" & Range("BF65536").End(xlUp).Row) 'x = BF1 à dernière cellule pleine de BF
For Each x In x 'Boucle sur toutes les cellules pleines de la colonne BF
If x ="NB"  Then x.EntireRow.Delete 'Efface la ligne
End If 'Fin de la condition
Next x 'Fin de la boucle
End Sub

VB:
Sub Filtres_POD_WK_Report()
Dim x As Range 'Déclare la variable x -> x = cellule
Set x = Range("BH1:BH" & Range("BH65536").End(xlUp).Row) 'x = BH1 à dernière cellule pleine de BH
For Each x In x
If x ="BEANRU" or
If x ="DEHAMU" or
If x ="GBLGPU" or
If x = "NLRTMU"
Then x.EntireRow.Delete 'Efface la ligne
End If 'Fin de la condition
Next x 'Fin de la boucle
End Sub

Je vous joins également un exemple du fichier Excel pour m’indiquer à quel moment je me trompe

D’avance merci pour votre aide et avis

Bonne journée,
 

GALOUGALOU

XLDnaute Accro
Bonjour 13007 bonjour le forum
En réveillant un sujet aussi vieux, vous n'avez pas beaucoup de chance d'obtenir des réponses.
Je vous conseille de créer votre propre fil de discussion sur le sujet
Malgré tout voici un début de réponse, pour supprimer des lignes, il vaut mieux faire une boucle à l'envers pour éviter des confusions dans la suppression.
Je ne vais pas commenter votre macro, je laisse ça au spécialiste, mais je vous propose de tester la macro ci-dessous, en remplaçant votre_feuille par le nom de votre onglet, elle devrait vous donner satisfaction.
VB:
Sub Filtres_NB_WK_Report()
Dim J As Long
Dim mot1 As String
mot1 = "NF"

LI = Sheets("votre_feuille").Cells(65536, 58).End(xlUp).Row
For J = LI To 1 Step -1
If Range("BF" & J) = mot1 Then
Rows(J).Delete
End If
  Next J
End Sub
Code:
Sub Filtres_POD_WK_Report()
Dim J As Long
Dim mot1 As String
Dim mot2 As String
Dim mot3 As String
Dim mot4 As String

mot1 = "BEANRU"
mot2 = "DEHAMU"
mot3 = "GBLGPU"
mot4 = "NLRTMU"

LI = Sheets("votre_feuille").Cells(65536, 60).End(xlUp).Row
For J = LI To 1 Step -1
If Range("BH" & J) = mot1 Or Range("BH" & J) = mot2 Or Range("BH" & J) = mot3 Or Range("BH" & J) = mot4 Then
Rows(J).Delete
End If
  Next J
End Sub

cdt
galougalou
 

Discussions similaires

Statistiques des forums

Discussions
313 344
Messages
2 097 337
Membres
106 916
dernier inscrit
Soltani mohamed