eriiic a écrit :
Bonjour à un tous,
un exemple avec filtre en ligne 1 et colonne à tester = B :
Private Sub CommandButton1_Click()
[A1].AutoFilter Field:=2, Criteria1:="0", Criteria2:="-", Operator:=xlOr
Rows(2).Resize(Cells(Rows.Count, 2).End(xlUp).Row).Delete Shift:=xlUp
[A1].AutoFilter Field:=2
End Sub
eric
Merci pour ta proposition, ça marche très bien ! Quelques latences encore, mais vu que la base de données à traiter est immense. Parfait pour plus petit
Steelson a écrit :
Alors, y a t'il plus rapide ?
https://www.cjoint.com/c/ECrtbNVYHAw
Pour simplifier (c'est une démo), j'ai mis plus de 90.000 lignes, la colonne L contient des nombres au hasard de 0 à 9, et je supprime les lignes avec un "2", puis je rétablis l'ordre des lignes en considérant qu'elles étaient triées sur la colonne 1. Et puis je commence ligne 2 et pas 9.
edit, j'ai dû en supprimer une de trop d'ailleurs ... j'aurais du mettre :
Rows(Sheets("Feuil2").Range("B2") & ":" & (Sheets("Feuil2").Range("B3") - 1)).Select
Selection.Delete Shift:=xlUp
C'est LA solution parfaite !!! Tout marche, et c'est super fluide (même pas le temps de cligner des yeux que c'est déjà fini !)
Voici le code final prenant en compte les deux paramètres de tri :
Sub Suppression_lignes_Proposition_du_Forum()
' Macro servant à supprimer les lignes dont les montants sont à 0 et les lignes erronnées avec des -
' Solution trouvée à partir du forum Excel-Pratique via les différentes propositions : http://forum.excel-pratique.com/excel/accelerer-une-boucle-t62158.html
'Suppression des lignes à 0
derligne = Range("A1").End(xlDown).Row
'Déterminer la plage de données sur laquelle le code va s'exécuter
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"L2:L" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Prise en compte du critère de suppression numéro 1
Rows(Sheets("Paramètres de tri").Range("B2") & ":" & Sheets("Paramètres de tri").Range("B3")).Select
Selection.Delete Shift:=xlUp
derligne = Range("A1").End(xlDown).Row 'Détermine le nombre de lignes maxi sur lequel les tris vont s'effectuer
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"A2:A" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Suppression des lignes avec des tirets pour montant
derligne = Range("A1").End(xlDown).Row
'Déterminer la plage de données sur laquelle le code va s'exécuter
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"L2:L" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Prise en compte du critère de suppression numéro 1
Rows(Sheets("Paramètres de tri").Range("B7") & ":" & Sheets("Paramètres de tri").Range("B8")).Select
Selection.Delete Shift:=xlUp
derligne = Range("A1").End(xlDown).Row 'Détermine le nombre de lignes maxi sur lequel les tris vont s'effectuer
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"A2:A" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Un grand MERCI à tous pour le temps passé et pour les différentes propositions !