Suppression de lignes vides

Isi_77

XLDnaute Nouveau
Bonsoir,

Un n-ième post sur la suppression de lignes vides dans un fichier Excel (désolé).

Petit historique :
J'ai traité un fichier simple de 533 ko en faisant un croisement de données avec un autre fichier via une formule un peu complexe avec une recherche dans une matrice (imbrication de INDEX et EQUIV) puis un filtre sur une des colonnes pour répartir chaque résultat dans un nouvel onglet par un Ctrl A et copier/coller (çà va, tout le monde suit ? ;) )
A l'enregistrement, l'opération me parait anormalement longue et après avoir pesté sur mon matériel, je me rends compte que le fichier fait désormais... 18 Mo

Filou, j'avais entendu dire qu'en enregistrant le fichier en CSV puis de nouveau en XLS, on réduisait la taille du fichier, sauf que le CSV ne prend pas en compte le multi onglets (en tout cas d'après ce que me raconte Excel).

Une recherche chez vous m'a amemé sur la piste de la présence de lignes vides (confirmée par une recherche sur la dernière cellule).
Alors que la dernière ligne remplie est environ au rang 200, la dernière ligne vide se trouve aux confins du fichier (ligne 65194 !!!! )

J'ai trouvé une macro chez vous :
Code:
Private Sub CommandButton1_Click()
Dim Li, Co, LiOr, CoOr As Integer
Dim StrTest As String
Li = ActiveWindow.RangeSelection.Rows.Count
Co = ActiveWindow.RangeSelection.Columns.Count
LiOr = ActiveWindow.RangeSelection.Row
CoOr = ActiveWindow.RangeSelection.Column
ActiveSheet.Cells(LiOr, CoOr).Select
Do While ActiveCell.Row <= Li
    StrTest = ''
    For j = 1 To Co
        StrTest = StrTest & ActiveCell.Offset(0, j - 1).Text
    Next j
    If StrTest = '' Then
        Rows(ActiveCell.Row).Delete
        Li = Li - 1
    Else
        ActiveCell.Offset(1).Select
    End If
Loop
End Sub

J'ai créé une pure macro en remplaçant le Private Sub CommandButton1_Click() par Sub SupprimeLignesVides () et débuggé le code en ajoutant la déclaration de la variable j dans les Integer.

Le premier lancement est ... looooong

J'ai donc "optimisé" en supprimant le rafraîchissement d'écran, ce qui au final donne ceci
Code:
Sub SupprimeLignesVide()
Application.ScreenUpdating = False
Dim j As Integer
Dim Li, Co, LiOr, CoOr As Integer
Dim StrTest As String
Li = ActiveWindow.RangeSelection.Rows.Count
Co = ActiveWindow.RangeSelection.Columns.Count
LiOr = ActiveWindow.RangeSelection.Row
CoOr = ActiveWindow.RangeSelection.Column
ActiveSheet.Cells(LiOr, CoOr).Select
Do While ActiveCell.Row <= Li
    StrTest = ""
    For j = 1 To Co
        StrTest = StrTest & ActiveCell.Offset(0, j - 1).Text
    Next j
    If StrTest = "" Then
        Rows(ActiveCell.Row).Delete
        Li = Li - 1
    Else
        ActiveCell.Offset(1).Select
    End If
Loop
Application.ScreenUpdating = True
End Sub

Le deuxième lancement est ... loooong (y'a un o de moins :D ) : près de 20 minutes pour traiter une feuille.

J'ai donc 3 questions :
1 / Y'a-t-il un moyen d'optimiser ce traitement long mais efficace (5 Mo après traitement de 5 onglets) ?
2 / Comment autant de lignes vides peuvent s'incruster dans un tel type de fichier ?
3 / Comment l'éviter ?

Bon, en attendant vos lumières, j'y retourne, j'ai encore 3 onglets à traiter ;)

Cordialement
Eric
 

Isi_77

XLDnaute Nouveau
Re : Suppression de lignes vides

Bonsoir,

La macro a l'air de fonctionner sous Excel 2000 sur quelques lignes.
Je testerai demain avec mon super fichier de 18 Mo :rolleyes:
Merci du coup de main.

Par contre, une chose est sûre : la macro n'a pas l'air de fonctionner sous Excel 2007 avec le fichier en mode compatibilité.
Je viens de tester avec BigFile (lol) et la dernière cellule est toujours dans les profondeurs de la Matrice (mais j'ai toujours pas trouvé Néo)

Rendez-vous demain pour le chapitre final.

Xlement vôtre
Eric
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35