0
votes

Comment supprimer une rangée entière d'une table dans Excel uniquement si plusieurs cellules sont vides dans cette rangée? (VBA)

J'ai 10 colonnes dans une table Excel et je veux supprimer les lignes où la première cellule est vide. J'ai essayé de le faire de cette façon: xxx

mais ça ne marche pas. Est que je dois utiliser une boucle imbriquée pour des rangées et des colonnes?


0 commentaires

5 Réponses :


1
votes

Généralement parlant oui. Boucle sur les lignes que vous voulez vérifier,

 Rows(rowcounter).Delete


2 commentaires

Lors de la suppression des lignes, itérer en arrière :)


Oh bon point - donc il devrait être pour Rowcounter = 10 à 1 étape -1



0
votes

Je suppose que cet extrait simple, plein de procédures inutiles, peut vous aider:

Sub NotTested()

    ' Choose below the rows range
    first_row = 2
    last_row = 4242

    For r = last_row To first_row Step -1

        ' Checking below each column (from row r) value
        a_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 1).Value2
        b_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 2).Value2
        c_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 3).Value2
        d_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 4).Value2
        e_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 5).Value2
        f_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 6).Value2
        g_value = ThisWorkbook.Sheets("Sheet1").Cells(r, 7).Value2

        ' Comparing if the columns are actually empty
        If a_value = "" And b_value = "" And c_value = "" And d_value = "" And e_value = "" And f_value = "" And g_value = "" Then            
            ThisWorkbook.Sheets("Sheet1").Cells(r, 1).EntireRow.Delete             
        End If

    Next r

End Sub


0 commentaires

1
votes

Vous n'avez pas besoin de multiples boucles. Une seule boucle avec l'utilisation du La fonction isempty () devrait fonctionner: xxx


0 commentaires

0
votes

Voici une solution simple qui compte en fait le nombre de lignes dans une table puis supprime si les 7 premières colonnes sont vides.

Sub deleteEmptyRows()
Set tbl = ActiveSheet.ListObjects("Table4")
For I = 1 To tbl.Range.Rows.Count
    If WorksheetFunction.CountA(Range("A" & I & ":" & "G" & I)) = 0 Then
        Sheets("Sheet1").Rows(I).EntireRow.Delete
    End If
Next I
End Sub


1 commentaires

Fais attention. Le numéro de ligne dans un ListObject peut être différent de ce numéro de ligne dans la feuille de calcul. Ce code ne fonctionnerait que si ListObject commence à la ligne 1. Sinon, vous supprimez la mauvaise ligne



1
votes

Vous pouvez boucler à travers chaque rangée directement et vérifier si les 7 premières cellules de cette rangée de votre table sont vides. Si vrai, supprimez-les. XXX

Le bon point de cette façon est que si votre table change d'adresse, elle fonctionnera toujours. Il suffirait que de mettre à jour si vous souhaitez vérifier un nom différent de cellules (sept rgght maintenant) ou si la condition (7 premières cellules vides) change.


0 commentaires