Macro suppression ligne vide ne fonctionne pas

Résolu
Bonjour,

j'ai défini une macro supprimant les lignes d'une feuille Excel si la première cellule de chaque ligne est vide.
J'ai naturellement repris des formules trouvées sur le Net et j'ai fait de bêtes copier-coller,
mais j'ai toujours le même message d'erreur: Erreur d’exécution '13': Incompatibilité de type au niveau de la ligne "If Cells(i, 1) = "" Then"
Selon vous qu'elle est l'erreur dans le code qui suit?

Sub Delete_line()
For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
End Sub

Merci d'avance

Configuration: Windows / Chrome 80.0.3987.163

6 réponses

  1. Contributeur
    Bonjour,

    déclare ta variable:

    Dim i As Integer


    chez moi cela fonctionne!
    1
    1. Contributeur
      Bonjour

      J'ai fait un essai sur des cellules fusionnées horizontalement et/ou verticalement et c'est OK

      Option Explicit
      '---------------------------------------------------------------------------
      Sub Supprimer_si_vide()
      Dim Ligne As Long

      On Error Resume Next
      Ligne = Columns("A").Find("*", , , , , xlPrevious).Row
      Range("A2:A" & Ligne).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
      End Sub


      1
      1. Avec la proposition de michel_m, je n'ai plus le message d'erreur mais la macro n'aboutit pas au résultat espéré. Est-ce dû au fait que les cellules qui m’intéressent ne sont pas vraiment vides mais la formule qui est inscrite dedans génère une cellule vide dans certains cas?
        0
    2. Non toujours pas, est-ce que cela peut-être dû au fait que j'ai des cellules fusionnées dans la colonne A?
      0
      1. Contributeur
        Bien sur, les macros n'aiment pas les cellules fusionnées!
        0
    3. Y'a t-il un moyen de la faire fonctionner, par exemple lancer la macro sur l'ensemble des colonnes concernées par la fusion?
      0
      1. Contributeur
        essaie ceci:

        Sub Delete_line()
        Dim i As Long
        Dim cellule As Range
        Dim derligne As Long
         derligne = Range("A" & Rows.Count).End(xlUp).Row
        For i = derligne To 1 Step -1
        For Each cellule In Range("A1:A" & derligne)
        If Range(cellule.Address).MergeCells Then
        Else
        If Cells(i, 1) = "" Then
        Cells(i, 1).EntireRow.Delete
        End If
        End If
        Next cellule
        Next i
        End Sub
        


        @+ Le Pivert
        0
    4. J'ai testé la proposition pour les cellules fusionnées, la première sans cellules fusionnées mais j'ai toujours le même problème...
      0
      1. Contributeur
        Voici une boucle sur les cellules fusionnées et enlever la fusion:

        Sub detecteFusion()
        Dim cellule As Range
        Dim derligne As Long
         derligne = Range("A" & Rows.Count).End(xlUp).Row
        For Each cellule In Range("A1:A" & derligne) 'adapter plage cellule
        If Range(cellule.Address).MergeCells Then
         cellule.UnMerge 'enleve la fusion
        End If
        Next cellule
        End Sub
        0
    5. J'aurais du commencer par là, en fait j'ai copié un fichier pour garder la mise en forme sans savoir qu'il y'avait des formules cachées derrière. Une fois que j'ai refait la feuille à neuf, la macro initiale a fonctionné parfaitement. Malgré tout je tiens à vous remercier pour la qualité et la rapidité de vos réponses
      0