[VBA Excel] Suppression de lignes

Résolu
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**
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. 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
    1. Modérateur
      Merci Polux31,
      :-$ , tu as raison voilà ce que c'est de survoler la demande, il y a des "fausses notes" :)
    2. @aquarelleVoilà c'est exactement ça, merci beaucoup :)

      (j'ai pris comme solution celle d'aquarelle)
  2. Modérateur
    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
    1. merci mais il faut surtout qu'elle convienne à enigmatoile ...

      ;o)

      polux
      1. 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.
        1. 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
          1. 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