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,
😰😥😭
Regarde la pièce jointe 1220026
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.
Re,
A priori, la méthode Add2 n'est pas vraiment nécessaire, notamment dans notre cas.
Donc, .Add fonctionne aussi très bien (je viens de faire l'essai, 0.5 tout pareil)
 
Bonjour le fil, le forum

de mémoire, la méthode SortFields.Add2 est apparue avec la version 2016
la méthode SortFields.Add a été conservée
la méthode SortFields.Add2 comporte juste un paramètre facultatif supplémentaire subField dont je n'ai jamais eu besoin et je préfère conserver Add pour la rétro compatibilité avec 2010 et antérieurs.
Je n'ai, pour ma part, pas remarqué de différence de rapidité significative entre les deux syntaxes.
L'enregistreur de macro a utilisé la syntaxe Add2 par défaut à partir d'Excel 2016, en incluant le nouveau paramètre facultatif.

Cordialement,
Bernard_XLD
 
Bonjour Bernard,
J'ai fouillé un peu et trouvé ceci. ( Lien )
"Add" n’inclut pas la prise en charge des types de données, tels que Geography ou Stocks. Ce que fait Add2.
Il vaut mieux donc utiliser "Add" ce qui rend la macro compatible de 2007 à 365. Ce qui n'est pas le cas de "Add2".
 
Re,

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.
Sylvanu,

J'ai 1 petit souci et une question:
LE souci: la dernière linge du tableau n'est pas filtrée par rapport aux code de la feuille List_Org
La question: pourquoi dans ta formule tu as M2 et U1 alors que les données sont en L2 et T ?

Merci
Bonne après-midi
 
Re,
1- Précisez sur quelle version vous avez vu le défaut. Si c'est sur la V6, effectivement il manque un "1+" pour le calcul de N.
2- J'insère une colonne en A pour y mettre les formules ( que je supprime à la fin ), donc L devient M et T devient U.
3- Avez vous vu une différence de temps d'exécution par rapport à la première version ?
 

Pièces jointes

Re,
1- Précisez sur quelle version vous avez vu le défaut. Si c'est sur la V6, effectivement il manque un "1+" pour le calcul de N.
2- J'insère une colonne en A pour y mettre les formules ( que je supprime à la fin ), donc L devient M et T devient U.
3- Avez vous vu une différence de temps d'exécution par rapport à la première version ?
1-Même sur la V7...J'ai ce soucis la dernière n'est pas filtrée
2-OK je comprends mieux 🙂
3-Oui, 0.4s pour 11000 lignes
 
Je reviens sur la question du tri soulevée par Cousinhub (fichier du post #21).

Chez moi sur Win 11 Excel 2019 cette instruction :
VB:
        .EntireRow.Sort .Cells, xlDescending
s'exécute en 36 secondes.

Mais je l'ai modifiée en :

VB:
        .Resize(, 13).Sort .Cells, xlAscending, Header:=xlNo
qui s'exécute en 0,67 seconde.

C'est curieux qu'avec .EntireRow ça prenne du temps car je l'ai souvent utilisée dans le passé sans problème.

Peut-être à cause d'une mise à jour tordue, Microsoft en fait assez souvent...
 
Dernière édition:
Perso je pense que le demandeur n'a d'écho que pour Sylvain il est le seul intervenant a qui il répond pratiquement systématiquement (7 fois sur 11 interventions ) et encore j'ai de la chance il m'a répondu 3 fois car j'ai insisté.

Donc la prochaine je laisserais Sylvain répondre j'espère pour le demandeur qu'il ne sera pas en vacances sinon il attendra son retour.
 
- 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

Réponses
5
Affichages
272
Réponses
6
Affichages
160
Retour