[VBA Excel] Suppression de lignes

Résolu/Fermé
enigmatoile Messages postés 730 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mars 2008 - 13 mars 2008 à 17:19
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 15 mars 2008 à 18:53
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?
A voir également:

7 réponses

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 mars 2008 à 17:30
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
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 mars 2008 à 18:00
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
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 mars 2008 à 18:26
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.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 mars 2008 à 19:26
merci mais il faut surtout qu'elle convienne à enigmatoile ...

;o)

polux
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303
13 mars 2008 à 20:18
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
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
13 mars 2008 à 20:33
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
0
aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024 1 303
13 mars 2008 à 20:38
Merci Polux31,
:-$ , tu as raison voilà ce que c'est de survoler la demande, il y a des "fausses notes" :)
0
enigmatoile Messages postés 730 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mars 2008 5 > aquarelle Messages postés 7141 Date d'inscription dimanche 8 avril 2007 Statut Modérateur Dernière intervention 19 décembre 2024
15 mars 2008 à 16:59
Voilà c'est exactement ça, merci beaucoup :)

(j'ai pris comme solution celle d'aquarelle)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 mars 2008 à 18:53
content pour toi ... n'oublies pas de mettre résolu

;o)

polux
0