Suppression de ligne sous condition Macros VBA [Résolu/Fermé]

Signaler
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017
-
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017
-
Bonjour à tous et merci pour votre attention,

Voila j'ai un tableau Excel interminable. Deux colonnes :
- Une avec des dates.
- Une avec des références sous forme de numéro et lettres. Ces références peuvent commencer par des numéros ou des lettres ca dépend.

Deux taches à faire :
- Supprimer toutes les lignes de references qui ne commencent pas par le chiffre 5.
- Supprimer toutes les lignes de dates antérieurs au 01/12/2015.

Voila mon essai mais ca ne fonctionne pas :

Dim cell As Range
For Each cell In ActiveSheet.UsedRange
If Left$(cell.Value,1) <> "5" Then cell.EntireRow.Delete
If IsDate(b) And b.Value < #01/12/2015# Then
If c.Value < #01/12/2015# Then Rows(i).Delete
Next

Merci

3 réponses

Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162
Bonsoir

proposition ci dessous

colonnes A et B traitées indépendamment (j' aimerai si possible appliquer le filtre sur une colonne precise et non sur toute la feuille).


tes 5137 lignes traitées en 0,06 secondes

Option Explicit
Const Seuil As Long = #12/1/2015# 'format UK;=1/12/2015 format FR
'--------------------------------
Sub Supprimer_sous_conditions()
Dim Derlig As Integer, T_in, Cptr As Integer
Dim T_date, Cptd As Integer, T_cinq, Cptq As Integer
Dim start As Single

'------------------------initialisations
start = Timer
Application.ScreenUpdating = False 'fige l'écran: rapidité, confort
With ActiveSheet ' plusieurs feuilles
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
T_in = .Range("A2:B" & Derlig)
ReDim T_date(1 To UBound(T_in))
ReDim T_cinq(1 To UBound(T_in))

'-------------------------Traitements
For Cptr = 1 To UBound(T_in)
'Traitement des dates
If T_in(Cptr, 1) >= Seuil Then
Cptd = Cptd + 1
T_date(Cptd) = T_in(Cptr, 1)
End If
'traitement des ref
If T_in(Cptr, 2) Like "5" & "*" Then
Cptq = Cptq + 1
T_cinq(Cptq) = T_in(Cptr, 2)
End If
Next
'-------------------------Restitution
'nettoyage
.Range("A2:B" & 20000).Clear
'dates
.Range("A2").Resize(UBound(T_date), 1) = Application.Transpose(T_date)
.Range("A2:A" & UBound(T_date) - 1).Borders.Weight = xlThin
'ref
.Range("B2").Resize(UBound(T_cinq), 1) = Application.Transpose(T_cinq)
.Range("B2:B" & UBound(T_cinq) - 1).Borders.Weight = xlThin
End With

Application.ScreenUpdating = True
MsgBox Derlig & " lignes traitées en " & Timer - start & " sec."
End Sub
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162 >
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Donc, c'est bien ligne conservée si
date>=1/12/15 ET AUSSI ref commençant par 5 ?
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Oui :)
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162 >
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

OK
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162 >
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021

Bonjour
0,05 secondes pour 5150 lignes avec 121 lignes répondant aux critères date ET "5..."

http://www.cjoint.com/c/FAjhohM4fGq
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Bonjour Michel,

Ca fonctionne tres tres bien Merci beaucoup !

Une excellente journee !
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
604
cell est un mot réservé dans VBA pour désigner l'objet cellule.
Il faut donc remplacer la variable objet cell par exemple, par cellule.
Par ailleurs b et c ne sont pas définis.
Ceci devrait convenir
For Each cellule In ActiveSheet.UsedRange
If Left$(cellule.Value, 1) <> "5" Then cellule.EntireRow.Delete
If IsDate(cellule.Value) And cellule.Value < DateValue("01/12/2015") Then cellule.EntireRow.Delete
Next


 
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Merci Thev ! Ca m'a un peu eclairer mais ca ne fonctionne toujours pas :/ ...
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162
bonjour
ce n'est pas "cell" qui est un mot réservé mais "cells" ...

qu'appelles tu "tableau interminable" ? nombre de lignes : 500,10000 ?

Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Bonjour,

Ca depend puisque je souhaiterai appliquer cette methode sur plusieurs feuilles differentes mais ca va de 5000 a 17000 environ.
j' aimerai si possible appliquer le filtre sur une colonne precise et non sur toute la feuille.

Merci
Messages postés
16431
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 avril 2021
3 162 >
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

OK, c'est parti; un peu de patience

Mais un extrait du classeur (1000 ou 2000 lignes environ, colonnes A B C) m'aiderait beaucoup
D'avance merci
pour cela
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse

Dans l’attente
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Merci Michel !

Voici le lien : https://www.cjoint.com/c/FAhogTVYk5E
Donc en gros supprimer toutes les lignes de dates qui sont avant 01/12/2015 ET supprimer les lignes de references qui ne commencent pas par le chiffre 5.

Voila :)