Suppression de lignes si condition remplie [Résolu]

Signaler
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
salut,
j'ai voudrais faire un programme qui me permette de supprimer les lignes dont la valeur de la cellule f serait inférieure à celle de la cellule a2 (en l'occurence ce sont des dates). pour l'instant j'ai fait ça, mais le problème c'est que ça me supprime tout le tableau (en plus je sais pas comment il faut faire pour définir que c'est la colonne f qui doit être prise en compte):

Dim myctrl, dernligne, I
If MsgBox("Etes-vous sûr de vouloir supprimer tous les emprunts à terme?", vbExclamation + vbOKCancel, "Suppression emprunts") = vbOK Then
dernligne = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Count - 1
Application.ScreenUpdating = False
For I = dernligne To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(I)) < [A2] Then
Rows(I).Delete shift:=xlUp
End If
Next I
Else
Cancel = True
End If

en fait il faudrait qu'il me fasse le test pour chaque cellule (à partir de la n° 5) de la colonne F puis qu'il me mette automatiquement les lignes non-supprimées à la suite. est-ce que quelqu'un aurait une idée? merci d'avance

4 réponses

Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

finalement ça joue avec ce code:

Private Sub CommandButton5_Click()
Dim i As Integer
Sheets("Feuil1").Select
'si la colonne de dernière date est par ex "F"
For i = 1 To Range("F65536").End(xlUp).Row
If Cells(i, 6).Value <> "" And Cells(i, 6) < Now Then
Cells(i, 6).EntireRow.Delete
i = i - 1
' --------
End If
Next i
End Sub

merci beaucoup pour ton aide
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Plutôt que ceci
If Application.WorksheetFunction.CountA(Rows(I)) < [A2] Then

essaie cela
If range("F" & i) < Range("A2") then

MPi
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

j'ai essayé de faire avec ton idée, mais ça ne marchait pas. le plus proche que j'ai réussi à faire pour l'instant c'est ça:

Private Sub CommandButton2_Click()

'Dim myctrl, dernligne, I 'il semble qu'on est pas obligé de déclarer toutes ces variables...
'Dim lig As Long
'Dim col As String
'Dim nbrlig As Long
'Dim numlig As Long

If MsgBox("Etes-vous sûr de vouloir supprimer tous les emprunts à terme?", vbExclamation + vbOKCancel, "Suppression emprunts") = vbOK Then
col = "F" ' colonne données non vides à tester'
With Sheets("feuil1") ' feuille source'
nbrlig = .Cells(65536, col).End(xlUp).Row
For lig = 5 To nbrlig 'n° de la 1ere ligne de données'
If .Cells(lig, col).Value <> [B2] Then
.Cells(lig, col).EntireRow.Delete
End If
Next
End With
Else
Cancel = True
End If
End Sub

le problème c'est qu'il fait une ligne sur deux à chaque fois qu'on lance le programme et il ne tient pas compte de [B2], il me laisse uniquement les lignes qui ont la valeur 0 dans la colonne F...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Lorsque tu effaces des lignes, commence TOUJOURS par la fin comme dans ton premier exemple. De cette façon tu ne sauteras pas de lignes.

For i = Range("F65536").End(xlUp).RowTo 1 Step - 1

MPi