suppression lignes en fonction des dates

nice

XLDnaute Nouveau
Bonjour à tous,

Mes faibles connaissances en VBA ne me permettent pas de régler ce problème
J'ai une série de valeurs dans les cellules de la colonne A, séparées par des virgules
avec une date en 1ère valeur( en format anglais, Année, Mois, Jour).
Je veux seulement conserver les lignes correspondant à la date la plus récente dernier jour avec une macro.
(Le nombre de ligne pouvant varier)

( voir fichier joint)
Auriez vous la gentillesse de m'aider
Merci infiniment
 

Pièces jointes

  • Classeur1.xls
    19.5 KB · Affichages: 78
  • Classeur1.xls
    19.5 KB · Affichages: 84
  • Classeur1.xls
    19.5 KB · Affichages: 100

Staple1600

XLDnaute Barbatruc
Re : suppression lignes en fonction des dates

Bonjour


Puisque tu débutes en VBA

Saches que tu peux obtenir ce que tu souhaites sans macro en utilisant:
1) Données/Convertir
2) les fonctions AUJOURDHUI() et MIN

Intéressé par cette piste ?

Ou tu veux vraiment une macro ?
 

nyko283

XLDnaute Occasionnel
Re : suppression lignes en fonction des dates

Bonjour Nice, Staple, le forum,

Tu touveras ci joint ton fichier avec une macro te permettant de garder uniquement les lignes qui auront la meme date que celle de ta derniere ligne (d'apres ton fichier, les lignes sont importées chronoligiquement), les autres lignes seront supprimer.

Dans la macros tu trouveras tous les commentaires normalement nécessaire à la compréhension.

Bon dimanche à tous:cool:.
 

Pièces jointes

  • Classeur1.xls
    33.5 KB · Affichages: 100
  • Classeur1.xls
    33.5 KB · Affichages: 102
  • Classeur1.xls
    33.5 KB · Affichages: 104

nice

XLDnaute Nouveau
Re : suppression lignes en fonction des dates

Merci Nyko
c'est exactement ce que je cherchais, et merci aussi pour tes commentaires
Pour ma compréhension, une question:
Pourquoi utilises tu la fonction CDATE qui transforme une chaine de caractères en date, alors que la partie isolée de gauche est déjà en format date?
Merci infiniment
 

Staple1600

XLDnaute Barbatruc
Re : suppression lignes en fonction des dates

Re, bonjour nyko283


Une macro donc
(en suivant la piste évoquée (et modifiée) plus bas)
Code:
Sub test()
Dim crit&, fin&
fin = [A65536].End(3).Row
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 5), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, 9), Array(6, 9)), _
        TrailingMinusNumbers:=True
crit = Application.Max(Range("B1:B" & fin))
ActiveSheet.Range("B1:B" & fin).AutoFilter 1, "<" & crit, xlAnd
Selection.EntireRow.Delete
Columns(2).Delete
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : suppression lignes en fonction des dates

Re


Juste pour infos: l'avantage d'utiliser Données/Convertir et d'extraire les dates
C'est qu'ensuite avec le filtre automatique , un vaste monde s'offre à toi
. datefiltre.gif
Cliques sur l'image pour plus de détails.

Pour répondre à ta question: oui on peut éviter la sélection.
EDITION: voici la macro modifiée en conséquence
Code:
Sub test_2()
Dim crit&, fin&
Application.ScreenUpdating = False
fin = [A65536].End(3).Row
Range("A1:A" & fin).TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 5), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, 9), Array(6, 9)), _
        TrailingMinusNumbers:=True
crit = Application.Max(Range("B1:B" & fin))
ActiveSheet.Range("B1:B" & fin).AutoFilter 1, "<" & crit, xlAnd
Cells.SpecialCells(xlCellTypeVisible).EntireRow.Delete
Columns(2).Delete
Application.ScreenUpdating = True
End Sub
 
Dernière édition:

nyko283

XLDnaute Occasionnel
Re : suppression lignes en fonction des dates

Pour en revenir à CDATE,

En visuel, la chaine de caractere est une date mais pour Excel cela reste du texte ( tu peut le voir car il est entouré de guillemet) or les dates dans Excel est un nombre ( aujourd'hui nous somme le 08/05/2011 et bas pour Excel nous sommes le 40671 eme jour depuis le 1 janvier 1900) donc pour les comparer facilement, dans ton fichier je compare le dernier jour 40669(06/05/2011) et tous ce qui est plus petit 40668...

Mais il est vrai que l'on aurait pu comparer les chaines de caratères...
 

Staple1600

XLDnaute Barbatruc
Re : suppression lignes en fonction des dates

Re

Est il possible aussi d'extraire de cette chaine la date , A, et C seulement
Oui comme je l'ai déjà dit avec Données/Convertir ;)

Voila
Code:
Sub Macro4()
Dim  fin&
Application.ScreenUpdating = False
fin = [A65536].End(3).Row

Range("A1:A" & fin).TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 5), Array(2, 1), Array(3, 9), Array(4, 1), Array(5, 9), Array(6, 1)), _
        TrailingMinusNumbers:=True
Application.ScreenUpdating =True
End Sub
 
Dernière édition:

nice

XLDnaute Nouveau
Re : suppression lignes en fonction des dates

Re Nicolas
Il y a un petit souci
La macro me donne une erreur 9 à la ligne " maDate", j'utilise un très grand nombre de ligne (dans certains cas environ 60 000 lignes)
Peux tu regarder ?
Merci infiniment
Gilbert
 

Staple1600

XLDnaute Barbatruc
Re : suppression lignes en fonction des dates

Re


Et avec ma macro, il y aussi un petit souci ou pas ?

Concernant le code de nyko283
Modifies ainsi
Code:
Dim i As Long
et aussi
Code:
For i = Range("A65536").End(xlUp).Row To 1 Step -1
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia