Suppression de ligne sous condition Macros VBA

Résolu/Fermé
CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017
- 6 janv. 2016 à 21:33
CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017
- 11 janv. 2016 à 10:04
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
A voir également:

3 réponses

michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280
7 janv. 2016 à 17:43
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
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280
8 janv. 2016 à 07:17
Bonjour
j'ai suivi la demande "colonne par colonne" mais ça me parait quand même bizarre...
0
CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

8 janv. 2016 à 10:44
Bonjour Michel !

C'est deja beaucoup mieux vraiment un grand merci !
Cependant je vois que c'est pas encore parfait au niveau des dates et il me reste des cases vides dans les deux colonnes ce que j'aimerai supprimer aussi...
0
CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

8 janv. 2016 à 11:16
Aussi j'aimerai preciser que les deux filtres sont lier c'est a dire que si l'un se confirme l'autre aussi automatiquement et inversement.
0
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280 > CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

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

8 janv. 2016 à 15:52
Oui :)
0
thev
Messages postés
1770
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
11 novembre 2021
663
Modifié par thev le 6/01/2016 à 22:25
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


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

6 janv. 2016 à 23:07
Merci Thev ! Ca m'a un peu eclairer mais ca ne fonctionne toujours pas :/ ...
0
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280
7 janv. 2016 à 08:35
bonjour
ce n'est pas "cell" qui est un mot réservé mais "cells" ...

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

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

7 janv. 2016 à 10:09
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
0
michel_m
Messages postés
16569
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
23 mai 2022
3 280 > CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

Modifié par michel_m le 7/01/2016 à 11:18
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
0
CamdenTown
Messages postés
37
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
6 février 2017

7 janv. 2016 à 15:09
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 :)
0