Microsoft 365 Suppression lignes par rapport à une date

  • Initiateur de la discussion Initiateur de la discussion pierrof
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pierrof

XLDnaute Occasionnel
Bonjour à tous,

Dans un nouveau projet j'aimerais mettre en forme un tableau en supprimant des lignes par rapport à une date.

En effet j'aimerais supprimer toutes les lignes du tableau si la date dans la colonne L est inférieur ou égale à la date de la cellule U2.

Je laisse un petit fichier exemple.

Merci de votre aide

Bonne journée
 

Pièces jointes

Solution
Re,
Si j'ai bien compris, essayez cette PJ avec :
VB:
Sub Supp_Lignes()
 Application.ScreenUpdating = False
    Dim DL%, DL1%, L%, DateSupp
    DL1 = Sheets("Liste_Org").Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Set Plage = Sheets("Liste_Org").Range("A2:A" & DL1)
    DL = Cells(Cells.Rows.Count, "L").End(xlUp).Row
    DateSupp = [T1]
    For L = DL To 2 Step -1
        If Cells(L, "L") <= DateSupp Or Application.CountIf(Plage, Cells(L, "D")) = 0 Then Cells(L, "A").EntireRow.Delete
    Next L
End Sub
Re,
(+ de 150000 lignes)
Avec autant de lignes, l'algo n'est vraiment pas optimisé. préférez cette V4.
Pour 50000 lignes ( pour tenir les 1Mo de livraison ) avec mon vieux XL2007, je passe de 124s à 1.2s soit 100 fois plus rapide.
Avec :
VB:
Sub Supp_Lignes()
'T0 = Timer  ' pour mesure du temps
 Application.ScreenUpdating = False
    Dim DL&
    Formule = "=IF(OR(M2<=$U$1,COUNTIF(Liste_Org!$A$2:$A$50,E2)=0),CHAR(1),0)"
    DL = Cells(Cells.Rows.Count, "L").End(xlUp).Row
    Columns("A:A").Insert Shift:=xlToRight
    With Range("A2:A" & DL)
        .Formula = Formule
        .Value = .Value
        .EntireRow.Sort .Cells, xlDescending
        On Error Resume Next
        .SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
    End With
    Columns("A:A").Delete Shift:=xlToLeft
'MsgBox Timer - T0 ' pour afficher temps d'execution
End Sub
NB: Supprimez les commentaires sur lignes T0= et Msgbox si vous voulez l'affichage du temps d'exécution.
 

Pièces jointes

Bonjour,
Re,
....
Pour 50000 lignes ( pour tenir les 1Mo de livraison ) avec mon vieux XL2007, je passe de 124s à 1.2s soit 100 fois plus rapide.
....
Perso, 34 secondes. (et même si je relance le code, j'ai toujours 15 secondes, bien qu'il n'y ait plus rien à supprimer)
????
@pierrof
Ces données sont issues d'une extraction?
Et si oui, comment les importes-tu?
Bonne journée
 
Bonjour à tous

Avec ma macro sur 50 000 lignes non triées

Test en supprimant 48 000 lignes ==> 5.4 secondes
Test en supprimant 35 000 lignes ==> 5.3 secondes
Test en supprimant .2 000 lignes ==> 2.5 secondes

1751532723769.png


et au 2eme passage donc 0 ligne à supprimer ==> T = 0.01 s

1751532814625.png
 
Bonjour à tous

Avec ma macro sur 50 000 lignes non triées

Test en supprimant 48 000 lignes ==> 5.4 secondes
Test en supprimant 35 000 lignes ==> 5.3 secondes
Test en supprimant .2 000 lignes ==> 2.5 secondes

Regarde la pièce jointe 1220012

et au 2eme passage donc 0 ligne à supprimer ==> T = 0.01 s

Regarde la pièce jointe 1220014
Hello,
Pareil pour moi, aux alentours de 40 secondes, avec ton code du #8 et les données issues du fichier de @sylvanu
Je crois que les nouvelles versions Excel n'aiment pas trop cette fonction :
VB:
SpecialCells(xlCellTypeVisible).EntireRow.Delete
(Il me semblait l'avoir déjà remarqué sur d'anciens fichiers 🤔)
Perso, xl2024
Bonne journée
 
Re,
En fait, je me suis déjà aperçu que mon XL2007 pouvait être plus rapide que des versions plus récentes.
Je pense que c'est dû au fait que les nouvelles versions beaucoup plus puissantes organisent leur données pour optimiser les nouveaux et puissants outils. Par ex XL2007 ne fait pas les calculs de façon matriciel par défaut, il faut lui préciser.
Sur mon vieux XL2007, VBA 6.3 et I5_2300 sur 150 000 lignes :

1751534926450.png


@Cousinub :
.SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
Ce serait une explication.
Par quoi la remplaceriez vous pour l'optimiser sur les nouvelles versions ?
 
Dernière édition:
Re,
@Cousinhub,
Par curiosité pouvez vous tester cette PJ.
J'ai remplacé :
VB:
.SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete

par :
N = 1+Application.CountIf([A:A], 1)
Range("A2:A" & N).EntireRow.Delete

( et remplacé CHAR(1) par 1. )
Sur mon PC je passe pour 50k lignes de 1.2 à 1.09s, et pour 150k lignes de 3.14s à 2.91s.

NB: Merci pour l'info, j'ai trouvé plus rapide que l'algo d'origine. 😉 En espérant que ce soit pareil sur 365.
 

Pièces jointes

Dernière édition:
Re-,
Bon, quand ce n'est pas .SpecialCells, c'est la méthode de tri (avec ton nouveau code, 34 secondes...)
Par contre, si on utilise les nouvelles méthodes de tri, j'obtiens 0.5 seconde...
VB:
Sub Supp_Lignes()
T0 = Timer  ' pour mesure du temps
 Application.ScreenUpdating = False
    Dim DL&
    Formule = "=IF(OR(M2<=$U$1,COUNTIF(Liste_Org!$A$2:$A$50,E2)=0),1,0)"
    DL = Cells(Cells.Rows.Count, "L").End(xlUp).Row
    Columns("A:A").Insert Shift:=xlToRight
    With Range("A2:A" & DL)
        .Formula = Formule
        .Value = .Value
    End With
    With Feuil1
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=.Range("A2:A" & DL), Order:=xlDescending
        .Sort.SetRange .Range("A1:L" & DL)
        .Sort.Header = xlYes
        .Sort.Apply
    End With
    On Error Resume Next
    N = Application.CountIf([A:A], 1)
    Range("A2:A" & N).EntireRow.Delete
    Columns("A:A").Delete Shift:=xlToLeft
MsgBox Timer - T0 ' pour afficher temps d'execution
End Sub
Je ne sais pas si c'est fonctionnel avec ta version, mais pour les nouvelles, je pense qu'il vaut mieux respecter les méthodes proposées, le nombre de lignes d'un code ne présume en rien la vélocité.
 
Re,
😰😥😭
1751543208392.png

Je pense que c'est lié à la version VBA 6.3 vs 7.0 qui doit être celle de 365.
Tant pis.

Par contre pas d'erreur si je met ".Add" au lieu de ".Add2" ( avec le même temps chez moi )
Ca devient trop pointilleux. Dommage.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 format date
Réponses
3
Affichages
94
Réponses
6
Affichages
135
Retour