Comment supprimer des lignes avec une macro

LAFCO

XLDnaute Nouveau
Bonjour,

J'ai un fichier avec 5 colonnes. Les colonnes 2, 3 et 4 comportent des chiffres et lorsque sur une ligne les 3 cellules des colonnes 2, 3 et 4 sont à zéro il faudrait que cette ligne se supprime.

Comment faire avec une macro ?

Merci pour votre réponse.

Lafco
 

porcinet82

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Salut,

Un petit exemple de code :
Code:
Sub test()
Dim i&
For i = Range("A65536").End(xlUp).Row To 1 Step -1
    If Cells(i, 2).Value = 0 And Cells(i, 3).Value = 0 And Cells(i, 4).Value = 0 Then
        Rows(i).Delete
    End If
Next i
End Sub

Remarque, si tes cellules sont vides et non égales à 0 , tu remplaces le If par celui ci :
If IsEmpty(Cells(i, 2)) And IsEmpty(Cells(i, 3)) And IsEmpty(Cells(i, 4)) Then

@+
 

casper64

XLDnaute Nouveau
Re : Comment supprimer des lignes avec une macro

Bonjour,
j'aimerais obtenir une macro qui puisse supprimer des lignes vides dans un tableau et le plus rapidement possible.
Le tableau final fait environ 3500 lignes.
Dans l'exemple joint, je n'ai mis qu'une trentaine de ligne.
La macro doit s'exécuter dans la feuill2 ; les lignes à supprimer sont par exemple les lignes 2-3-4-5-13-14-15-29-30.
Dans les colonnes A et B de ces lignes, il y a déjà une formule qui affiche une case vide.

Je vous remercie de vos retours! :)
Bien à vous
 

Pièces jointes

  • Classeur1.xls
    40 KB · Affichages: 80
  • Classeur1.xls
    40 KB · Affichages: 90
  • Classeur1.xls
    40 KB · Affichages: 92

DoubleZero

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Bonjour à toutes et à tous,

Bienvenue sur XLD, casper64 !

En attendant mieux... une suggestion en pièce jointe.

A bientôt :)
 

Pièces jointes

  • 00 - casper64 - Lignes vides supprimer.xls
    51 KB · Affichages: 88

casper64

XLDnaute Nouveau
Re : Comment supprimer des lignes avec une macro

Merci pour la réponse mais ça n'a pas l'air de marcher :confused:

J'ai trouvé un autre moyen de supprimer les lignes (cf pièces jointes).
Le truc c'est qu'avec mon PC il faut environ 2 min pour supprimer toutes les lignes où "supp" est noté (comme dit précédemment, j'ai environ 3500 lignes)
Y a t'il un moyen d'accélérer la cadence?

++ et merci de vos réponses :) !!
 

Pièces jointes

  • test ok.xls
    47 KB · Affichages: 73

jim7963

XLDnaute Junior
Re : Comment supprimer des lignes avec une macro

Salut,

j'ai légérement retouché ton code.
Chez moi la suppresion des lignes est quasi instantanée. Je te laisse tester chez toi.
 

Pièces jointes

  • Classeur1(1).xls
    46 KB · Affichages: 90
  • Classeur1(1).xls
    46 KB · Affichages: 97
  • Classeur1(1).xls
    46 KB · Affichages: 86

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Bonjour à tous, Salut 00 :)
Une autre version, avec suppression des lignes en une fois
VB:
Sub Supprimerligne_Efgé()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim i&, Plg As Range
With Sheets("Feuil2")
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        If .Cells(i, 1).Value = "" And .Cells(i, 2).Value = "" Then _
            Set Plg = Union(.Rows(i), IIf(Plg Is Nothing, .Rows(i), Plg))
    Next i
    If Not Plg Is Nothing Then Plg.Delete
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Cordialement
 

laetitia90

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

bonjour tous :):)
si on veut pas conserver les formules

Code:
 Sub es()
  Dim t(), t1(), x As Long, i As Long, y As Long
  t = Feuil2.Range("a2:b" & Feuil2.Cells(Rows.Count, 1).End(xlUp).Row)
  ReDim t1(1 To UBound(t), 1 To 2)
  For i = 1 To UBound(t)
  If t(i, 1) <> "" And t(i, 2) <> "" Then
  x = x + 1
  For y = 1 To 2: t1(x, y) = t(i, y): Next y
  End If
  Next i
  Feuil2.[a2:b4000].ClearContents
  Feuil2.[A2].Resize(x, 2) = t1
End Sub
 

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Re, Salut Laetitia :)
Bonne idée, ne supprimons pas, copions :D
Plus besoin de formules.
VB:
Sub Copie()
Dim i&, Plg As Range
With Sheets("Feuil1")
    Set Plg = .Range("A1:B1")
    For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
        If .Range("A" & i) < 10 Or .Range("A" & i) > 15 Then
            If .Range("B" & i) < 1 Or .Range("B" & i) > 2 Then
                Set Plg = Union(.Range("A" & i & ":B" & i), Plg)
            End If
        End If
    Next i
End With
With Sheets("Feuil2")
    .UsedRange.ClearContents
    If Not Plg Is Nothing Then Plg.Copy .Range("A1")
    .Activate
End With
End Sub
Cordialement
 

Pièces jointes

  • test_ok(3).xls
    37 KB · Affichages: 66

casper64

XLDnaute Nouveau
Re : Comment supprimer des lignes avec une macro

Bonjour à tous, je vous remercie de toutes vos réponses.
C'est vrai que ce tout dernier code de Efgé à l'air pas mal.
Est ce qu'il y aurait moyen d'apporter les modifications suivantes :
au lieu de mettre les chiffres 10, 15, 1 et 2 directement dans le code, il faudrait les remplacer par les cellules qui contiennent ces chiffres (voir doc joint, feuil1, cellules D1, E1, F1 et G1) ?

Merci d'avance
 

Pièces jointes

  • test ok bis.xls
    47 KB · Affichages: 72

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Bonjour à tous
Pas très complexe :
VB:
If .Range("A" & i) < .Range("D1").Value Or .Range("A" & i) > .Range("E1").Value Then
            If .Range("B" & i) < .Range("F1").Value Or .Range("B" & i) > .Range("G1").Value Then

Cordialement
 

Pièces jointes

  • test_ok(4).xls
    60 KB · Affichages: 63

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Bonjour à tous,
Comme la nuit et mon ange gardien portent conseils, une autre version basée sur la proposition de Laetitia de passer par tableau (la création du Range union est rès longue en fait )
En ne passant que par un seul tableau, j'arrive à 0.48 pour 50 000 lignes en entrées et 34 000 lignes en sortie.
VB:
Private Sub CommandButton1_Click()
Dim I&, K&, MinA&, MaxA&, MinB&, MaxB&, T As Variant
K = 1
With Sheets("Feuil1")
    MinA = .[d1]:   MaxA = .[e1]
    MinB = .[f1]:    MaxB = .[G1]
    T = .Range("A1:B" & .Cells(Rows.Count, 1).End(xlUp).Row)
    For I = 2 To UBound(T, 1)
        If (T(I, 1) < MinA Or T(I, 1) > MaxA) And _
            (T(I, 2) < MinB Or T(I, 2) > MaxB) Then
                K = K + 1
                T(K, 1) = T(I, 1): T(K, 2) = T(I, 2)
        End If
    Next I
End With

Application.ScreenUpdating = False
Columns("A:B").Clear
Range("A1").Resize(K, UBound(T, 2)) = T
Application.ScreenUpdating = True
End Sub
Cordialement
 

casper64

XLDnaute Nouveau
Re : Comment supprimer des lignes avec une macro

ok mais comment passe t'on d'un Sub Copie_2() à un Private Sub CommandButton1_Click() ?

Bonjour à tous
Pas très complexe :
VB:
If .Range("A" & i) < .Range("D1").Value Or .Range("A" & i) > .Range("E1").Value Then
            If .Range("B" & i) < .Range("F1").Value Or .Range("B" & i) > .Range("G1").Value Then

Cordialement

Désolé mais ces lignes de code ne donnent pas le résultat voulu : il ne devrait rester que les cellules où il y a un "1" dans la colonne C de la Feuil1.

Merci pour vos réponses
 

Pièces jointes

  • test.xls
    60 KB · Affichages: 51
  • test.xls
    60 KB · Affichages: 55
  • test.xls
    60 KB · Affichages: 57
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

Bonjour casper64, le fil, le forum:
J'ai utilisé un commandbouton Menu affichage / Barres d'outil / Boite à outils contrôle (pas formulaire)
Pour voir le code de mon exemple, clic droit sur l'onglet / visualiser le code
Je te laisse l'exemple avec la toute dernière version du code et un classeur fait par MichelXLD (je crois) pour débuter avec les boutons de commandes.
Cordialement

EDIT :
Regarde bien le résultat du fichier exemple, c'est exactement le résultat attendu sur l'exemple de ton post 5.
 

Pièces jointes

  • Debuter CommandButton.xls
    167 KB · Affichages: 91
  • Debuter CommandButton.xls
    167 KB · Affichages: 92
  • Debuter CommandButton.xls
    167 KB · Affichages: 93
  • test_ok(6).xls
    53 KB · Affichages: 55
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Comment supprimer des lignes avec une macro

RE
Le problème viens du fait que tu as modifié la formule.....
Formule de la demande 5 :
=SI(ET(OU(A6 < 10;A6 > 15);OU(B6 < 1;B6 > 2));1;"")
Dernière formule donnée :
=SI(OU(OU(A2 < $D$1;A2 > $E$1);OU(B2 < $F$1;B2 > $G$1));"";1)

Ce n'est forçment pas le même résultat....

Donne nous la formule magique que tu es le seul à connaitre, et j'adapterai (si c'est dans mes compétences)

Cordialement
 

Discussions similaires

Réponses
40
Affichages
1 K
Réponses
22
Affichages
875

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 989
dernier inscrit
jralonso