[VBA Excel] Suppression de lignes
Résolu
enigmatoile
Messages postés
730
Date d'inscription
Statut
Membre
Dernière intervention
-
Polux31 Messages postés 6917 Date d'inscription Statut Membre Dernière intervention -
Polux31 Messages postés 6917 Date d'inscription Statut Membre Dernière intervention -
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?
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?
A voir également:
- [VBA Excel] Suppression de lignes
- Forcer suppression fichier - Guide
- Liste déroulante excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
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
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:
;o)
polux
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.
Félicitation pour ta solution.
I.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir à tous,
En voici une autre :
Bonne soirée
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