[VBA Excel] Suppression de lignes
Résolu
enigmatoile
Messages postés
724
Date d'inscription
Statut
Membre
-
Polux31 Messages postés 7219 Statut Membre -
Polux31 Messages postés 7219 Statut Membre -
Bonjour,
Je souhaite supprimer les lignes pour lesquels la colonne G est vide.
J'ai écrit le code suivant :
Sub suppression_id_vide()
Dim compteur As Long
Dim MaFeuille As Worksheet
Dim DerniereLigne As Long
Set MaFeuille = ActiveSheet
DerniereLigne = MaFeuille.Range("A1").CurrentRegion.End(xlDown).Row
For compteur = 2 To DerniereLigne
If MaFeuille.Cells(compteur, 7) = vide Then
Rows(compteur).EntireRow.Delete
End If
Next compteur
End Sub
Cette fonction ne marche pas, parce qu'on supprime une ligne et ensuite on passe à l'indice suivant, donc quand ona plusieurs lignes consécutives à supprimer il en supprime une sur deux...
Je comprends ce qui se passe mais jene sais pas comment résoudre ce souci...
Pouvez vous m'aider?
--
**Enigmatoile**
Je souhaite supprimer les lignes pour lesquels la colonne G est vide.
J'ai écrit le code suivant :
Sub suppression_id_vide()
Dim compteur As Long
Dim MaFeuille As Worksheet
Dim DerniereLigne As Long
Set MaFeuille = ActiveSheet
DerniereLigne = MaFeuille.Range("A1").CurrentRegion.End(xlDown).Row
For compteur = 2 To DerniereLigne
If MaFeuille.Cells(compteur, 7) = vide Then
Rows(compteur).EntireRow.Delete
End If
Next compteur
End Sub
Cette fonction ne marche pas, parce qu'on supprime une ligne et ensuite on passe à l'indice suivant, donc quand ona plusieurs lignes consécutives à supprimer il en supprime une sur deux...
Je comprends ce qui se passe mais jene sais pas comment résoudre ce souci...
Pouvez vous m'aider?
--
**Enigmatoile**
Configuration: Windows XP Internet Explorer 6.0
7 réponses
-
Salut !
débarassons-nous du compteur qui fausse le comptage des lignes et faisons une boucle tant que la derniere ligne n'est pas atteinte.
Si la colonne 7 est vide : suppression de la ligne
sinon : on passe à la suivante
ça marche ?
I.
Sub suppression_id_vide()
Dim MaFeuille As Worksheet
Dim DerniereLigne As Long
Set MaFeuille = ActiveSheet
DerniereLigne = MaFeuille.Range("A1").CurrentRegion.End(xlDown).Row
While activecell.row < derniereligne
with activecell
if cells(.row,7) = empty then
.entirerow.delete
else
.offset(1,0).activate
end if
end with
Wend
End Sub -
Bonjour,
Ivan-hoe, as-tu testé ta macro ? ça fait une boucle sans fin chez moi ... :-s ... de plus il faut que la cellule active soit sur la première ligne ... si elle est au milieu de la feuille toutes les cellules au dessus sont ignorées ...
Voilà ce que je propose, en admettant qu'il n'y ai pas de cellules vides intercalées dans la colonne A:Sub suppression_id_vide() Dim compteur As Long Dim MaFeuille As Worksheet Dim vide As String Set MaFeuille = ActiveSheet compteur = 2 While Mafeuille.Range("A" & compteur).Value <> "" 'Faire Tant que col: A lig: compteur n'est égal = "" If MaFeuille.Cells(compteur, 7) = vide Then 'Si la cellule col: G lig: compteur est égal = "" Rows(compteur).EntireRow.Delete 'Efface la ligne = compteur compteur = compteur - 1 'Décrémente le compteur de 1 pour revenir en arrière End If 'Fin si compteur = compteur + 1 'On passe à ligne suivante Wend 'Fin Tant que End Sub
;o)
polux -
Oups ! non, effectivement, ce n'était pas testé et comptait qqs incohérences ! Excès de confiance, sans doute. Désolé.
Félicitation pour ta solution.
I. -
merci mais il faut surtout qu'elle convienne à enigmatoile ...
;o)
polux -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonsoir à tous,
En voici une autre :Public Sub SupprLigneCellVide_ColG() Dim x As Long Dim y As Long x = Range("G65536").End(xlUp).Row For y = x To 1 Step -1 If Cells(y, 7).Value = "" Then Rows(y).Delete End If Next y End Sub
Bonne soirée -
Salut,
Bien aussi la méthode ... mais faire :For y = x To 2 Step - 1
Pour tenir compte que Enigmatoile veut préserver la première ligne qui doit être une ligne de titre.
;o)
polux -
content pour toi ... n'oublies pas de mettre résolu
;o)
polux