For I Next

Bonjour,

je reviens à la suite de mon premier post sur le sujet, j'aimerai avoir vôtre avis.

la Macro exécute cette boucle sur une feuille contenant une extraction brut d'un WMS. Parfois cette extraction peut contenir jusqu'à 50.000 lignes et plus. Ma question est : Est ce qu'il y a une différence entre ce code sans variable qui sélectionne chaque ligne non voulues puis les supprimes OU une variable qui aurait en mémoire toute les lignes non voulues avec une seule suppression du lot ? si c'est possible.

With Sheets("Extraction") For i = .Range("P" & Rows.Count).End(xlUp).Row To 3 Step -1 If Cells(i, 16) <> "XDK" Then Rows(i).EntireRow.Delete End If Next i End With

PS ce code fonction à merveille en exécution Pas à Pas et en automatique sur une petite quantité de lignes mais si je passe la centaine de ligne, c'est comme si la Macro ignorait la boucle ???

Salut BreizhThom

Perso ce que je ferais, c'est un tri de toutes les lignes sur la colonne contenant XDK

Je chercherais le numéro de la première ligne contenant justement "XDK"

Je supprimerai alors en une seule fois, toutes les lignes de la 2 à la Xième

@+

C'est une option que je garde de coté si la suppression par Macro est trop galère, c'est assez frustrant car en Pas à Pas cela fonctionne mais via le bouton de commande plus du tout

Bonjour,

à tester,

Sub test()
Range("A2:P" & Range("P" & Rows.Count).End(xlUp).Row).Sort key1:=Range("P2"), order1:=xlAscending
n1 = Application.Match("XDK", Range("P:P"), 0)
n2 = Application.Match("XDK", Range("P:P"))
Rows(n1 & ":" & n2).Activate   '.Delete Shift:=xlUp
End Sub

Bonjour I20100,

Non La méthode Sort de la range échoue malheureusement.

Au risque d'être un poil chiant, comme j'apprend tout seul les commentaires de fonctionnement me sont très utile pour comprendre plutôt que de recopier bêtement un code de quelqu'un qui maîtrise.

bonjour,

un proposition du même genre

Sub aaargh()
    Dim plage As Range
    With Sheets("Extraction")
        dl = .Cells(Rows.Count, "P").End(xlUp).Row 'nombre de lignes
        dc = .Cells(2, Columns.Count).End(xlToLeft).Column 'nombre de colonnes
        Set plage = .Range(.Range("A2"), .Cells(dl, dc)) 'plage à nettoyer
        plage.Sort key1:=.Range("P2"), order1:=xlAscending, Header:=xlYes 'tri pour grouper tous les XDK ensemble suppression en bloc très efficace
        plage.AutoFilter Field:=16, Criteria1:="<>*XDK*", Operator:=xlAnd 'sélection de toutes les lignes ne contenant pas XDK en colonne P
        plage.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp 'suppression des lignes sélectionnées = visibles
        plage.AutoFilter 'suppression du filtre
    End With
End Sub

Bonjour H2so4,

T'as proposition de code fonctionne parfaitement, merci pour les commentaires en plus.

Merci pour vôtre temps et sans doutes à bientôt !

Thom

Rechercher des sujets similaires à "next"