Suppression des lignes vides

Résolu
Bonjour,

j'ai un soucis avec le code ci-dessous. En fait ce code est sensé supprimer les lignes entières vides dans une base de données mais elle ne le fait pas. Quelqu'un pourrait il m'expliquer pourquoi ? merci d'avance.
Sub supprimeLignesVides()
'variables
Dim O As Worksheet, I As Integer, TV As Variant, J As Integer
Dim TL() As Variant
'valeurs
Set O = Worksheets("Feuil2")
TV = O.Range("A1").CurrentRegion

'boucle for
For I = 1 To UBound(TV, 1) - 1
   If TV(I + 1, 1) <> TV(I, 1) Then
   ReDim Preserve TL(J)
   TL(J) = I + 1
   J = J + 1
   End If
 Next I
 For J = UBound(TL) To LBound(TL) Step -1
 O.Rows(TL(J)).Delete shift:=xlShiftUp
 Next J
End Sub

Ci-joint le fichier Excel contenant la base de données en question (onglet Feuil2)
https://www.cjoint.com/c/GAfn7Hcl3SL

5 réponses

  1. Contributeur
    Regarde la ligne 11: il me semble que ce code élimine les doublons.
    Si tu veux supprimer les lignes vides, modifie la ligne 11 pour tester que la ligne I est entièrement vide, et retire le +1 dans la ligne 13.
    1. Bonjour a vous deux,

      jeandchanel
      vous ecrivez: "supprimer lignes vides" et vous ne testez que la colonne A (TV(I,1)). Alors cellules A ou toute la ligne vide ????
      1. toute la ligne vide !!!
      2. Contributeur
        combien de colonnes utilises-tu?
    2. Contributeur
      CurrentRegion va s’arrêter à la première ligne vide, sois-y attentif!
      1. que dois je faire ?
    3. Bonjour,

      jeandchanel

      yg_be - 5 janv. 2017 à 18:42
      combien de colonnes utilises-tu?
      Répondre
      Signaler 6 jeandchanel - 6 janv. 2017 à 07:31
      une colonne!
      Répondre


      Ben alors le controle se fait sur les cellules de la colonne A pas sur une ligne complete de colonne A a L, faut savoir !!!

      Suite:
      une facon de faire pour controle cellules colonneA
      Sub Sup_Ligne()
          Dim Plage As Range
          
          On Error GoTo suite     'sortie si erreur avec defige ecran
          Application.ScreenUpdating = False      'fige ecran
          With Worksheets("feuil2")
              derligF = .Cells.Find("*", , , , xlByRows, xlPrevious).Row      'derniere cellule non vide colonne a
              Set Plage = .Range("A3:A" & derligF)        'mise en memoire plage cellules
              Nb = Plage.Count        'nombre de rang
              NCV = Application.CountIf(Plage, "")        'nombre de cellules "vide"
              'boucle sur cellules "vide"
              If NCV > 0 Then
                  lig = 3     'ligne de depart
                  For N = 1 To NCV
                      lig = .Columns(1).Find("", .Cells(lig, 1), , xlWhole).Row       'recherche ligne cellule "vide"
                      .Rows(lig).Delete           'suppression ligne
                      '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
                      lig = lig - 1       '-1 en cas de cellules "vides" consecutives (a supprimer si jamais vrais)
                      '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
                  Next N
              End If
          End With
      suite:
          Application.ScreenUpdating = True       'defige ecran
      End Sub
      1. bonjour et merci pour votre aide, ca marche mais c'est un peu compliqué pour moi, je suis un vrai bleu en VBA !!!
    4. Contributeur
      bonjour

      si cellule dans colonne A est vide, supprimer la ligne
      Sub virerligvide()
      Dim Derlig As Long

      Derlig = Columns("A").Find("*", , , , , xlPrevious).Row

      If Application.CountIf(Range("A1:A" & Derlig), "") > 0 Then
      Range("A1:A" & Derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
      End If
      End Sub

      1. Bonjour,
        en effet, plus simple si simplement controle des cellules colonne A
      2. @f894009Si simple mais supprime malheureusement aussi les entêtes !!!
      3. bonjour

        vraiment court et simple mais malheureusement supprime aussi les entêtes !!!
      4. Contributeur
        @jeandchanelBonjour jeandchanel

        très sympa de merci et Bonjour aux bénévoles...Merci

        Parce que dans une base de données, tu n'as pas d'ent^te en colonne A ?

        pourtant quand on lit ton code
        TV = O.Range("A1").CurrentRegion
        For I = 1 To UBound(TV, 1) - 1

        a propos:
        If TV(I + 1, 1) <> TV(I, 1) Then
        ReDim Preserve TL(J)


        t'es sûr ?
      5. @michel_mmon code ne supprime pas les entêtes mais plutôt et rien que la première ligne du tableau c’était ça mon soucis !