Bonjour à tous
Dans le classeur joint je voudrais supprimer la ligne si la date de création colonne A est égale ou supérieure à la date aujourd'hui
Merci
Sub Suppression()
Dim derlig&, i&
derlig = ThisWorkbook.Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
With ThisWorkbook.Worksheets("Feuil1")
For i = 2 To derlig
If .Cells(i, 1).Value > Now() Then
.Cells(i, 1).EntireRow.Clear
End If
Next i
End With
End Sub
puis vous lancez la procédure 'Suppression' comme bon vous semble ; bouton, changement de valeur d'une cellule, etc.
Cordialement
Bonjour
ne jamais au grand jamais faire de suppression dans une boucle dans le sens step 1
toujours boucle du dernier jusqu'au premier step-1
même si là ça fonctionne ça ne saura pas toujours le cas
Bien sûr,
En supprimant les lignes en descendant, le compteur ira trop loin puis le champ se réduit au fur et à mesure.
C'est pourquoi j'ai répondu que la réponse de @pierrejean était meilleure et je m'en veux car j'aurais du y penser avant.
Merci l'ami !
re
ben c'est surtout qu'avec delete non seulement tu ira trop loin mais tu va en zaper
apres a i regarder de plus près tu utilise un clearcontents donc tu delete pas
et secondo le demandeur a demandé "est égale ou supérieure à la date aujourd'hui"
pour deleter
sur un range
VB:
Sub RealSuppressionRowInRange()
Dim derlig&, i&
derlig = Cells(Rows.Count, 1).End(xlUp).Row
For i = derlig To 2
If Cells(i, 1).Value > Date - 1 Then
Cells(i, 1).EntireRow.Delete
End If
Next i
End Sub
si c'est un listobject("Tableau structuré') attention on ne delete pas une row mais un listrow
VB:
Sub RealSuppressionRowInListObject()
Dim i&
With Range("Tableau1").ListObject
For i = .ListRows.Count To 1 Step -1
If .ListRows(i).Range(1).Value > Date - 1 Then
.ListRows(i).Delete
End If
Next i
End With
End Sub
re
et je vois même un 3 eme problème même avec une boucle a reculons et même avec clearcontents
tu clear la ligne complète
il se peut que le tableau fasse x colonnes et qu'a coté ( à draite il y ai d'autre données (ex:un autre tableau) resultat tu bousille le tableau d'a coté aussi
comme quoi une question simple peut bien en succiter quelques autres
donc sur un range avec la methode clearr il faudrait travailler sur un tableau et non une colonne
et suprimer le ".rows(i) de la plage " et non la "cells(i,1).entirerow de la feuille " ce n'est pas du tout la même chose
exemple
VB:
Sub Suppressiononlyinrangefixe()
Dim derlig&, i&
derlig = Cells(Rows.Count, 1).End(xlUp).Row
With Range("A1:d" & derlig)
For i = 2 To .Rows.Count
If .Cells(i, 1).Value > Now() Then
.Rows(i).Clear
End If
Next i
End With
End Sub
les ligne supprimées dans A ne seront pas supprimées dans le reste des colonnes de la feuille
re
et je vois même un 3 eme problème même avec une boucle a reculons et même avec clearcontents
tu clear la ligne complète
il se peut que le tableau fasse x colonnes et qu'a coté ( à draite il y ai d'autre données (ex:un autre tableau) resultat tu bousille le tableau d'a coté aussi
comme quoi une question simple peut bien en succiter quelques autres
donc sur un range avec la methode clearr il faudrait travailler sur un tableau et non une colonne
et suprimer le ".rows(i) de la plage " et non la "cells(i,1).entirerow de la feuille " ce n'est pas du tout la même chose
exemple
VB:
Sub Suppressiononlyinrangefixe()
Dim derlig&, i&
derlig = Cells(Rows.Count, 1).End(xlUp).Row
With Range("A1:d" & derlig)
For i = 2 To .Rows.Count
If .Cells(i, 1).Value > Now() Then
.Rows(i).Clear
End If
Next i
End With
End Sub
les ligne supprimées dans A ne seront pas supprimées dans le reste des colonnes de la feuille
Parfaitement d'accord avec toi, mais bon, comme fichier de test, on avait une douzaine de lignes toutes seules ; après, c'est au demandeur de préciser correctement son besoin et d'avertir s'il y a des précautions à prendre en dessous et à côté ... ce qui n'enlève rien à la pertinence de toutes tes remarques.