Supprimer ligne par macro
Fermé
a.dequidt
Messages postés
42
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2007
-
10 sept. 2007 à 09:26
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 - 15 sept. 2007 à 15:49
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 - 15 sept. 2007 à 15:49
A voir également:
- Supprimer ligne par macro
- Supprimer compte instagram - Guide
- Supprimer une page word - Guide
- Supprimer compte facebook - Guide
- Macro logiciel - Télécharger - Organisation
- Apparaitre hors ligne whatsapp - Guide
12 réponses
Landoltp
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
1
10 sept. 2007 à 19:48
10 sept. 2007 à 19:48
salut,
je sais pas si ça peut t'aider, moi j'ai du faire une macro qui me supprimait les lignes quand la date de la colonne F était inférieure à aujourdhui... voilà ce que ça donne:
Dim i As Integer
Sheets("SGBBE").Select
If MsgBox("Etes-vous sûr de vouloir supprimer tous les emprunts à terme?", vbExclamation + vbOKCancel, "Suppression emprunts") = vbOK Then
'si la colonne de dernière date est par ex "F"
For i = 5 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
Else
Cancel = True
End If
il me semble que j'ai eu ton problème des lignes non supprimées (1 sur 2?), essaye de le faire de la dernière à la première, je crois que ça marche mieux comme ça (en tout cas pour mon cas)
je sais pas si ça peut t'aider, moi j'ai du faire une macro qui me supprimait les lignes quand la date de la colonne F était inférieure à aujourdhui... voilà ce que ça donne:
Dim i As Integer
Sheets("SGBBE").Select
If MsgBox("Etes-vous sûr de vouloir supprimer tous les emprunts à terme?", vbExclamation + vbOKCancel, "Suppression emprunts") = vbOK Then
'si la colonne de dernière date est par ex "F"
For i = 5 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
Else
Cancel = True
End If
il me semble que j'ai eu ton problème des lignes non supprimées (1 sur 2?), essaye de le faire de la dernière à la première, je crois que ça marche mieux comme ça (en tout cas pour mon cas)
Papou93
Messages postés
146
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
5 juin 2012
60
10 sept. 2007 à 23:06
10 sept. 2007 à 23:06
Bonsoir a.dequidt,
C'est normal que tu ne puisses supprimer tous les vides telle que ta boucle est conçue : tu dois décrémenter le compteur (ainsi que ligne_max) à chaque suppression d'une ligne puisque tu remontes d'une ligne à chaque fois.
Essaies de modifier ta boucle comme suit :
For i = ligne_min To ligne_max
If Range("B" & i).Value = "" And Range("S" & i).Value <> "" Then
Rows(i).Delete Shift:=xlShiftUp
i=i-1
ligne_max=ligne_max-1
End If
Next i
Cordialement.
C'est normal que tu ne puisses supprimer tous les vides telle que ta boucle est conçue : tu dois décrémenter le compteur (ainsi que ligne_max) à chaque suppression d'une ligne puisque tu remontes d'une ligne à chaque fois.
Essaies de modifier ta boucle comme suit :
For i = ligne_min To ligne_max
If Range("B" & i).Value = "" And Range("S" & i).Value <> "" Then
Rows(i).Delete Shift:=xlShiftUp
i=i-1
ligne_max=ligne_max-1
End If
Next i
Cordialement.
mdonnate
Messages postés
76
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
17 mai 2011
44
11 sept. 2007 à 15:18
11 sept. 2007 à 15:18
Si la question est toujours d'actualité:
Sub effacer_ligne()
Dim i as integer
Dim DernLign as string
DernLign = Sheets("Feuil1").UsedRange.Row + Sheets("Feuil1").UsedRange.Count - 1
'Permet de faire la macro en commençant par le bas, quel que soit le nombre de lignes
For i = DernLign to 1 Step -1
'enclenche le compte à rebours
If Not IsEmpty (Sheets("Feuil1").Cells(i,19)) And IsEmpty(Sheets("Feuil1").Cells(i,2)) Then
'vérifie que la cellule en S n'est pas vide, mais que celle en B oui
Sheets("Feuil1").Cells(i,2).EntireRow.Delete
'Supprime la ligne entière si les deux conditions sont vérifiées
End If
Next
End Sub
Tu peux remplacer "Feuil1" par le nom de ta feuille (n'oublie pas les "") ou utiliser ActiveSheet
Sub effacer_ligne()
Dim i as integer
Dim DernLign as string
DernLign = Sheets("Feuil1").UsedRange.Row + Sheets("Feuil1").UsedRange.Count - 1
'Permet de faire la macro en commençant par le bas, quel que soit le nombre de lignes
For i = DernLign to 1 Step -1
'enclenche le compte à rebours
If Not IsEmpty (Sheets("Feuil1").Cells(i,19)) And IsEmpty(Sheets("Feuil1").Cells(i,2)) Then
'vérifie que la cellule en S n'est pas vide, mais que celle en B oui
Sheets("Feuil1").Cells(i,2).EntireRow.Delete
'Supprime la ligne entière si les deux conditions sont vérifiées
End If
Next
End Sub
Tu peux remplacer "Feuil1" par le nom de ta feuille (n'oublie pas les "") ou utiliser ActiveSheet
a.dequidt
Messages postés
42
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2007
2
14 sept. 2007 à 09:50
14 sept. 2007 à 09:50
CODE:
b=1
ligne_min = Range("O" & b).Value
ligne_max = Range("P" & b).Value
For i = ligne_min To ligne_max
If Cells(i, 19).Value = "" Then
Rows(i).delete Shift:=xlShiftUp
i = i - 1
ligne_max = ligne_max - 1
End If
Next i
a l'execusion, Erreur d'execution '1004'
Yé compren po :'(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Landoltp
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
1
14 sept. 2007 à 10:16
14 sept. 2007 à 10:16
essaye de remplacer les lettres par des chiffres,
0=15
P=16
0=15
P=16
a.dequidt
Messages postés
42
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2007
2
14 sept. 2007 à 10:25
14 sept. 2007 à 10:25
comment ça?
Landoltp
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
1
14 sept. 2007 à 10:28
14 sept. 2007 à 10:28
dans ton code tu as:
b=1
ligne_min = Range("O" & b).Value
ligne_max = Range("P" & b).Value
essaye avec:
b=1
ligne_min = Range("15" & b).Value
ligne_max = Range("16" & b).Value
je sais pas si ça marchera, mais dans mon code c'est ce que j'ai du faire...
b=1
ligne_min = Range("O" & b).Value
ligne_max = Range("P" & b).Value
essaye avec:
b=1
ligne_min = Range("15" & b).Value
ligne_max = Range("16" & b).Value
je sais pas si ça marchera, mais dans mon code c'est ce que j'ai du faire...
a.dequidt
Messages postés
42
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2007
2
14 sept. 2007 à 10:30
14 sept. 2007 à 10:30
ça ne marche pas :(
Landoltp
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
1
14 sept. 2007 à 10:32
14 sept. 2007 à 10:32
mais tes "O" et "P" c'est bien les n° de colonnes?
a.dequidt
Messages postés
42
Date d'inscription
mardi 4 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2007
2
14 sept. 2007 à 10:44
14 sept. 2007 à 10:44
oui oui mais mon probleme se trouve au niveau de mon IF
Landoltp
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
1
14 sept. 2007 à 12:49
14 sept. 2007 à 12:49
je bloque un peu là, t'as essayé un truc du style:
For i = ligne_min to ligne_max
If Cells(i,196).Value = "" Then
Cells(i, 19).EntireRow.Delete
i = i - 1
End If
Next i
For i = ligne_min to ligne_max
If Cells(i,196).Value = "" Then
Cells(i, 19).EntireRow.Delete
i = i - 1
End If
Next i
Papou93
Messages postés
146
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
5 juin 2012
60
15 sept. 2007 à 15:49
15 sept. 2007 à 15:49
Bonjour a.dequidt,
Essaies alors une boucle comme celle-ci :
b = 1
ligne_min = Range("O" & b).Value
ligne_max = Range("P" & b).Value
For Each cel In Range(Cells(ligne_min, 1), Cells(ligne_max, 1))
If Cells(cel.Row, 19).Value = "" Then cel.EntireRow.Delete
Next
J'ai testé, chez moi ça fonctionne sans problème.
Cordialement.
Essaies alors une boucle comme celle-ci :
b = 1
ligne_min = Range("O" & b).Value
ligne_max = Range("P" & b).Value
For Each cel In Range(Cells(ligne_min, 1), Cells(ligne_max, 1))
If Cells(cel.Row, 19).Value = "" Then cel.EntireRow.Delete
Next
J'ai testé, chez moi ça fonctionne sans problème.
Cordialement.