XL 2013 VBA Supprimer une ligne si la date est inférieure à une date donnée

louane2022

XLDnaute Nouveau
Bonjour,

J'aimerais bien savoir quel code utiliser pour supprimer une ligne entière dans un tableau , avec condition que la date est supérieur au premier du mois courant.
 

Pièces jointes

  • Suppression ligne.xlsx
    12.1 KB · Affichages: 6

vgendron

XLDnaute Barbatruc
Bonjour,

Il va falloir autre chose qu'une image. parce qu'avec ca. on ne peut rien faire
sinon
pour avoir un début de code
1) tu lances l'enregistreur de macro
2) tu fais un filtre sur la date
3) tu supprimes les lignes filtrées
4) et tu arretes l'enregistreur de macro
 

yoyovento

XLDnaute Nouveau
quelque chose comme ca ?

VB:
Sub yo()
Dim rng As Range: Set rng = Application.Range(Cells(2, 1), Cells(2, 1).End(xlDown))
Dim cel As Range
premierdumois = DateSerial(Year(Date), Month(Date), 1)
j = rng.Cells.Count
For i = 2 To rng.Cells.Count
    If Cells(i, 1).Value < premierdumois Then
    Cells(i, 1).EntireRow.Delete
    i = i - 1
    j = j - 1
    End If
Next
End Sub
 

vgendron

XLDnaute Barbatruc
@yoyovento : Hello
ton idée est bonne, toutefois quelques "pbs"
si tu ne fais pas de application.screenupdating=false, ca risque d'etre long et faire sapin de noel (surtout si il y a beaucoup de lignes)
ton j=j-1 ne sert à rien car il n'est pas utilisé dans le for i=2 to rng.cells.count
il aurait fallu faire for i=2 to j

et le fait que tu fasses le i=i-1 montre que tu as déjà vu/subit le décalage suite aux lignes supprimées
d'où la règle / habitude qu'on utilise:
quand on supprime des lignes, on fait la boucle en remontant du bas vers le haut
for i= rng.cells.count to 2 step -1

à noter que ma solution n'est pas parfaite non plus puisque déjà. elle ne correspond pas à la solution que je décrivais au tout début: (filtre + suppression)==> j'ai toujours un pb pour faire des filtres avec des dates...
l'enregistreur de macro me donne pourtant un script qui une fois executé, ne reproduit pas le résultat.....
 

yoyovento

XLDnaute Nouveau
@yoyovento : Hello
ton idée est bonne, toutefois quelques "pbs"
si tu ne fais pas de application.screenupdating=false, ca risque d'etre long et faire sapin de noel (surtout si il y a beaucoup de lignes)
ton j=j-1 ne sert à rien car il n'est pas utilisé dans le for i=2 to rng.cells.count
il aurait fallu faire for i=2 to j

et le fait que tu fasses le i=i-1 montre que tu as déjà vu/subit le décalage suite aux lignes supprimées
d'où la règle / habitude qu'on utilise:
quand on supprime des lignes, on fait la boucle en remontant du bas vers le haut
for i= rng.cells.count to 2 step -1

à noter que ma solution n'est pas parfaite non plus puisque déjà. elle ne correspond pas à la solution que je décrivais au tout début: (filtre + suppression)==> j'ai toujours un pb pour faire des filtres avec des dates...
l'enregistreur de macro me donne pourtant un script qui une fois executé, ne reproduit pas le résultat.....
exact je n'ai pas collé le dernier texte :( il faut boucler jusqu'à j :p
bonne idée de partir depuis la fin, j'aurai dû y penser !

PS : moi j'aime bien quand ca bouge LOL ca fait matrix

louane2022 ca va avec ce code à adapter ?​

 

Discussions similaires

Réponses
8
Affichages
495

Statistiques des forums

Discussions
315 093
Messages
2 116 139
Membres
112 669
dernier inscrit
Guigui2502