Suppression de ligne en fonction d'une date
fortbelin
Messages postés
22
Statut
Membre
-
fortbelin Messages postés 22 Statut Membre -
fortbelin Messages postés 22 Statut Membre -
Bonjour,
Bonjour à tous et à toutes.
J'ai besoin de votre aide pour une macro.
Il s'agit de pouvoir supprimer des lignes d'une feuille excel mais seulement si une cellule de cette ligne contiens une date qui est antérieure à une date de référence.
Donc par exemple, supprimer toutes les lignes qui contiennent des dates antérieur au 25/12/2002
Merci beaucoup pour votre aide
Bonjour à tous et à toutes.
J'ai besoin de votre aide pour une macro.
Il s'agit de pouvoir supprimer des lignes d'une feuille excel mais seulement si une cellule de cette ligne contiens une date qui est antérieure à une date de référence.
Donc par exemple, supprimer toutes les lignes qui contiennent des dates antérieur au 25/12/2002
Merci beaucoup pour votre aide
10 réponses
-
Dans ce cas :
Private Sub CommandButton1_Click() Dim currentd As Date Dim refdate As Date Dim i, imax refdate = Range("A1").Value imax = Range("A65536").End(xlUp).Row For i = IndiceLigneDeTaPlageDeDate To imax + 1 If (Range("A" & i).Value < refdate) And (Range("A" & i).Value <> "") Then Range("A" & i).EntireRow.Delete i = i - 1 End If Next i End Sub
où ta date de référence est en A1, et ta plage de données est en colonne A mais tu peux adapter. Si tes dates sont en ligne G, remplace Range("A65536") par Range("G65536"), et les "A" & i par "G" & i.
Voilà.
-
Bonjour,
ta macro n'est pas exacte : quand on supprime des lignes, on ne part pas de la première à la dernière, mais de la dernière à la première.
En effet supposons que l'on doive supprimer la ligne 4 et 5. En partant de la première ligne, on va supprimer la 4e. La 5e devient donc la 4e, et la 6e devient la 5e. On continue le code et boucle, on arrive sur la 5e ligne (qui était la 6e), cette ligne n'est pas à supprimer. Du coup nous avons loupé la ligne n°5...
Dans l'autre sens, on part de la dernière, on supprime la 5e, la 4e reste 4e. On boucle, et on supprime la 4e.
Du coup il vaut mieux faireFor i = Imax+1 to IndiceLigneDeTaPalgeDeDate Step -1
Cordialement. -
-
-
-
-
-
Bonjour Fortbelin,
"Si une cellule de la ligne...", tu entends par là, une cellule, n'importe laquelle, ou une cellule bien précise?
-
Bonjour,
il s'agit plutôt d'une cellule bien précise car j'ai une colonne date dans ma feuille excel.
Donc en fait, si ma colonne date est en G par exemple et bien, la macro supprime toute les lignes qui ont dans la colonne G une date antérieur à une date de référence.
Merci beaucoup -
Merci beaucoup, je vais essayer
Est ce que vous auriez la même chose mais en fonction d'une liste de prénom.
Exemple, supprimer les lignes qui contiennent pierre ou paul ou jean ....
Merci
Christophe -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
C'est encore moi
je suis désolé mais cela ne marche pas ou alors c c'est mois qui ne fais pas ce qu'il faut
Est ce qu'il faut mettre le code dans un module
Private Sub CommandButton1_Click()
Dim currentd As Date
Dim refdate As Date
Dim i, imax
refdate = Range("C1").Value
imax = Range("C65536").End(xlUp).Row
For i = IndiceLigneDeTaPlageDeDate To imax + 1
If (Range("C" & i).Value < refdate) And (Range("C" & i).Value <> "") Then
Range("C" & i).EntireRow.Delete
i = i - 1
End If
Next i
End Sub
merci -
Merci beaucoup,
cela fonctionne.
Désolé mais je suis pas un spécialiste-
Aucun problème, mais il existe plein de tutoriels sur le net, ou des livres assez complets en librairie sur le VBA, alors n'hésites pas à consulter le net pour trouver comme réaliser des macros VBA.
Personnellement, je te conseillerais d'aller sur le site des éditions First (éditeur de la série "pour les nuls").
Cordialement.
-
-
est ce que tu aurais une idée pour faire la même chose avec une liste de prénom
merci -
Merci beaucoup, je vais essayer de me pencher sur le sujet mais pour le moment j'ai pas vraiment le temps.
On me demande ça à mon boulot ... -
De la même manière.
En admettant que les prénoms à supprimer soient en colonne A à partir de la ligne 2 sur ta première feuille et ta liste de prénoms générale en colonne A ligne 2 de ta deuxième feuille :
Private Sub CommandButton1_Click() Dim i1, i2 Dim imaxOne Dim imaxTwo imaxOne = Worksheets(1).Range("A65536").End(xlUp).Row imaxTwo = Worksheets(2).Range("A65536").End(xlUp).Row For i1 = 2 To imaxOne For i2 = 2 To imaxTwo If Worksheets(1).Range("A" & i1).Value = Worksheets(2).Range("A" & i2).Value Then Worksheets(2).Range("A" & i2).EntireRow.Delete i2 = i2 - 1 imaxTwo = imaxTwo - 1 End If Next i2 Next i1 End Sub -