Supprimer les lignes entièrement vides en VBA

Résolu/Fermé
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 14 avril 2011 à 10:15
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 14 avril 2011 à 11:22
Bonjour,

J'ai un petit soucis pour supprimer les lignes vides d'un fichier, par une macro.
En fait j'arrive bien à supprimer les lignes lorsque la première cellule est vide par exemple, mais ce n'est pas ce que je veux faire, il faut que toute la ligne soit vide.

J'ai pensé à faire quelque-chose du genre :

For i = 1 to 100
Si Cells(i,1)=" & cells(i,2)=" & etc....
Supprime la ligne...

Le problème c'est que je ne sais pas comment écrire cette multiple condition...


j'ai pensé aussi à tester la somme des valeurs de la ligne, si elle est nulle, je supprime
Nouveau problème : ce n'est pas un tableau uniquement numérique, je peux avoir de tout dedans...

Avez-vous une idée ?

Merci !


A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 14/04/2011 à 10:38
Bonjour,
Oui une idée serait de calculer, par VBA, le NBVAL de ta ligne. S'il est égal à 0 cela veux donc dire que ta ligne est vide entièrement.
NBVAL en VBA se "traduit" par :Application.WorksheetFunction.CountA
Ta macro deviendrait donc :
!!! Attention ce code contient un .Delete!!! A tester sur une copie de votre fichier
Sub test() 
Dim NombreVal As Integer, Lig As Integer 
For Lig = 1 To 10 
    NombreVal = Application.WorksheetFunction.CountA(Rows(Lig)) 
    If NombreVal = 0 Then 
        Rows(Lig).EntireRow.Delete 
    End If 
Next 
End Sub

--
Franck P
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
14 avril 2011 à 11:04
Merci bien, je l'ai testé et ça semble fonctionner.

Par contre, si je souhaite supprimer les lignes sur une feuille particulière, est-ce que je dois-je écrire quelque-chose comme :

Sub test() 
Dim NombreVal As Integer, Lig As Integer 
For Lig = 1 To 10 
    NombreVal = Sheets("Feuil3").Application.WorksheetFunction.CountA(Rows(Lig)) 
    If NombreVal = 0 Then 
        Sheets("Feuil3").Rows(Lig).EntireRow.Delete 
    End If 
Next 
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 14/04/2011 à 11:11
Sans tester, j'aurais plutôt écrit :
Sub test()  
Dim NombreVal As Integer, Lig As Integer  
With Sheets("Feuil3") 
For Lig = 1 To 10  
    NombreVal = .Application.WorksheetFunction.CountA(Sheets("Feuil3").Rows(Lig))  
    If NombreVal = 0 Then  
        .Rows(Lig).EntireRow.Delete  
    End If  
Next  
End With 
End Sub

Mais attention j'oubliais un détail...
Lorsque l'on Delete, il faut faire une boucle à "l'envers" :
Sub test()  
Dim NombreVal As Integer, Lig As Integer  
With Sheets("Feuil3") 
For Lig = 10 To 1 Step -1      
NombreVal = .Application.WorksheetFunction.CountA(Sheets("Feuil3").Rows(Lig))  
    If NombreVal = 0 Then  
        .Rows(Lig).EntireRow.Delete  
    End If  
Next  
End With 
End Sub
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
14 avril 2011 à 11:22
C'est ce qu'il me fallait, exactement !
Merci Pijaku !
0