Suppression des lignes vides

Résolu
jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   -  
jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   -
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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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.
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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 ????
    0
    1. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
       
      toute la ligne vide !!!
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      combien de colonnes utilises-tu?
      0
      1. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        une colonne!
        0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    CurrentRegion va s’arrêter à la première ligne vide, sois-y attentif!
    0
    1. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
       
      que dois je faire ?
      0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    0
    1. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour et merci pour votre aide, ca marche mais c'est un peu compliqué pour moi, je suis un vrai bleu en VBA !!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      en effet, plus simple si simplement controle des cellules colonne A
      0
    2. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Si simple mais supprime malheureusement aussi les entêtes !!!
      0
    3. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour

      vraiment court et simple mais malheureusement supprime aussi les entêtes !!!
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour 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 ?
      0
    5. jeandchanel Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
       
      mon code ne supprime pas les entêtes mais plutôt et rien que la première ligne du tableau c’était ça mon soucis !
      0