Macro pour supprimer les lignes entièrement vides d'un tableau Excel

benadry

XLDnaute Occasionnel
Bonjour le forum,

Voilà, je pense que tout est dans le titre : je cherche une macro me permettant de supprimer toutes les lignes qui sont entièrement vides dans mon tableau et uniquement celles-là ! Le but est de ne plus laisser de lignes vides pour créer des plages dynamiques avec la fonction DECALER.

J'ai essayé deux macros, mais soit certaines lignes sont oubliées, soit la macro ne fait rien du tout :

Code:
Sub SupprimerLignesVides()

Dim c As Long
Dim vLigne As Long


vDernièreligne = Sheets(Sheets.Count).UsedRange.Rows.Count

Application.ScreenUpdating = False

For vLigne = vDernièreligne To 1 Step -1


    If Application.CountA(Rows(vLigne)) = 0 Then Rows(vLigne).Delete
    
   
Next
End Sub

Code:
'Sub Supprimer_les_lignes_vides()


'Sheets(Sheets.Count).Range("A1:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 
'End Sub


Le fichier test que je vous joins n'est qu'un tout petit exemple. Le fichier réel fait près de 2500 lignes. Il faudrait donc que la macro soit la plus légère possible pour pouvoir s'exécuter rapidement. Pour information, dans le fichier test, comme dans le réel, seules les colonnes A à G sont susceptibles d'être remplies.

Si quelqu'un pouvait m'aider, ce serait vraiment très bien.


Merci d'avance.

Cordialement.
 

Pièces jointes

  • Classeur2.xlsm
    25.5 KB · Affichages: 54
  • Classeur2.xlsm
    25.5 KB · Affichages: 52
  • Classeur2.xlsm
    25.5 KB · Affichages: 49

NezQuiCoule

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Bonjour,

Je te renvoie le fichier avec les modifications nécessaires.
Ma méthode teste chaque celulle pour chaque ligne, dès qu'il rencontre une cellule non vide, il passe directement à la suivante, j'ai commenté mon code afin que tu puisses comprendre rapidement.

J'espère que cela va t'aider !

(Au passage, il y a beaucoup d'espaces inutiles et certaines lignes vides n'étaient pas considérées comme telles)
 

Pièces jointes

  • Classeur1.xlsm
    27.2 KB · Affichages: 79
  • Classeur1.xlsm
    27.2 KB · Affichages: 66
  • Classeur1.xlsm
    27.2 KB · Affichages: 57
Dernière édition:

benadry

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Bonjour NezQuiCoule,

Merci beaucoup pour ton aide, c'est très sympa.

Malheureusement, ça fait presqu'une heure que je teste ta macro sur mon fichier "réel" et elle n'a toujours pas fini de s'exécuter.

Ne connaîtrais-tu pas un moyen qui permettrait de l'accélérer ?

Merci en tout cas pour ton aide.

Cordialement.

A +
 

NezQuiCoule

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Re-bonjour benadry,

Je suis un peu embêté, car le fichier que tu as envoyé contenait environ 260 lignes, et ma macro a mit exactement 0,83 secondes pour s'exécuter..
D'après tes informations ton fichier réel fait 2500 lignes, cela ne devrait pas dépasser la dizaine de seconde en théorie. Peux tu, dans le code mettre un point d'arrêt juste après la ligne : vDernièreLigne = ... puis me dire que vaut cette variable ?
 

benadry

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Rebonjour NezQuiCoule,


Désolé, mais je ne suis pas familiarisé avec les macros.

J'ai mis le point d'arrêt après la ligne que tu m'indiques, mais qu'entends tu par

PHP:
puis me dire que vaut cette variable ?

Merci encore pour ton aide.

A +
 

NezQuiCoule

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Pas de souci, on est tous là pour apprendre, moi y compris ;)

Si tu as bien mis le point d'arrêt, le code va s'arrêter après la ligne, et tu n'as plus qu'à passer ta souris au dessus de ta variable "vDernièreLigne" pour qu'Excel t'affiche sa valeur. Dis moi si ça a fonctionné et donne moi cette valeur si tu peux.

L'autre solution est d'aller dans -> Affichage -> Variables Locales

Tu auras la liste des variables et leur valeur en temps réel lorsque tu utilises le mode pas à pas (F8)
 

job75

XLDnaute Barbatruc
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Bonsoir benadry, NezQuiCoule,

Une solution avec le filtre avancé :

Code:
Sub SupprimerLignesVides()
Application.ScreenUpdating = False
With Worksheets(Worksheets.Count) 'à adapter éventuellement
  .Rows(1).Insert
  .[A1] = "C1": .[A1].AutoFill .[A1:G1] 'titres
  .[H2] = "=SUMPRODUCT(N(TRIM(A2:G2)<>""""))" 'critère
  With .UsedRange.EntireRow
    .AdvancedFilter xlFilterInPlace, .Cells(1, 8).Resize(2)
    Workbooks.Add 'document auxiliaire
    .Copy ActiveSheet.[A1]
    .AdvancedFilter xlFilterInPlace, ""
  End With
  ActiveSheet.UsedRange.EntireRow.Copy .[A1]
  .Rows(ActiveSheet.UsedRange.Rows.Count + 1 & ":" & .Rows.Count).Delete
  .[H2] = ""
  .Rows(1).Delete
  ActiveWorkbook.Close False 'fermeture du document auxiliaire
  .Activate 'activation facultative
End With
End Sub
Dites-nous ce que ça donne en terme de rapidité sur 2500 lignes.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Re,

J'ai copié les données de la dernière feuille sur 3000 lignes.

Sur Win 7 - Excel 2010 la macro s'exécute en 0,73 seconde.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Re,

Outre les lignes vides, si l'on veut aussi supprimer les lignes où il n'y a que des valeurs zéro :

Code:
Sub Supprimer_LignesVides_ValeursZero()
Application.ScreenUpdating = False
With Worksheets(Worksheets.Count) 'adapter éventuellement
  .Rows(1).Insert
  .[A1] = "C1": .[A1].AutoFill .[A1:G1]
  .[H2] = "=SUMPRODUCT((TRIM(A2:G2)<>"""")*(A2:G2<>0))" 'critère
  With .UsedRange.EntireRow
    .AdvancedFilter xlFilterInPlace, .Cells(1, 8).Resize(2)
    Workbooks.Add 'document auxiliaire
    .Copy ActiveSheet.[A1]
    .AdvancedFilter xlFilterInPlace, ""
  End With
  ActiveSheet.UsedRange.EntireRow.Copy .[A1]
  .Rows(ActiveSheet.UsedRange.Rows.Count + 1 & ":" & .Rows.Count).Delete
  .[H2] = ""
  .Rows(1).Delete
  ActiveWorkbook.Close False 'fermeture du document auxiliaire
  .Activate
End With
End Sub
Il a suffi de modifier le critère de filtrage.

La durée d'exécution reste la même.

Bonne fin de soirée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Re,

Pour pinailler, en remplaçant à la fin :

Code:
.Activate
par :

Code:
.UsedRange.Parent.Activate
la barre de défilement verticale se repositionne sur le nouveau UsedRange.

Bonne nuit encore.
 

benadry

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Bonjour Job75, le forum,


Merci beaucoup pour votre aide.

Je viens de tester plusieurs fois ce matin et, à chaque fois, j'ai dû arrêter Excel après une dizaine de minutes, la macro étant complètement bloquée.

Comme je travaille en réseau, j'ai essayé de mettre le fichier sur mon disque dur avant de l'exécuter. J'ai aussi entièrement vidé mon classeur "réel" qui contient un bon nombre d'onglets pour ne plus avoir qu'une feuille avec le bouton de commande et une autre avec la feuille à traiter ... Même résultat.

Je travaille avec un PC récent, le fichier réel pèse à peine 350 Ko ! Evidemment, j'ai mis des tas et des tas de formules qui vont rechercher des données dans le tableau dont je veux supprimer les lignes vides. Comme je le disais hier en ouvrant cette discussion, mon but serait de remplacer mes formules de type :

Code:
=INDEX(INDIRECT("'"&$AG$2&"'!C:C");EQUIV(1;(($A9=INDIRECT("'"&$AG$2&"'!A:A")))*(($A$1=INDIRECT("'"&$AG$2&"'!H:H")));0)+1)

en faisant référence à des noms de plages dynamiques plutôt qu'à des colonnes entières (C:C, A:A, H:H), pour éviter de "fatiguer" Excel. Mais, pour ça, il ne faut pas que j'aie de vides dans les colonnes !!! Je tourne donc un peu en rond.

Merci pour votre aide, en tout cas.

Si vous avez une solution, je suis évidemment preneur. Pour autant, ne perdez pas trop de temps avec ça !

Je vais essayer de chercher de mon côté ...

Merci encore.

Cordialement.
 

NezQuiCoule

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Evidemment, j'ai mis des tas et des tas de formules qui vont rechercher des données dans le tableau dont je veux supprimer les lignes vides.

Aaaah d'accord j'ai compris donc d'où venait le problème.. et il existe une solution à priori ! Hourra ;)

En fait, à chaque fois que tu vas supprimer une ligne, tes formules vont toutes se recalculer automatiquement. Il faut donc désactiver le calcul automatique sur la feuille.

Pour ce faire, je te propose d'insérer ces lignes en début et en fin de code :

Code:
Application.Calculation = xlCalculationManual 'à mettre en début de procédure

Application.Calculation = xlCalculationAutomatic 'à mettre en fin de procédure

Fais un nouvel essai pour nous dire ce qu'il en est.
 

benadry

XLDnaute Occasionnel
Re : Macro pour supprimer les lignes entièrement vides d'un tableau Excel

Bonjour NezQuiCoule,


Très bien vu !!!

J'ai inséré tes deux parties de code en début et en fin du dernier code de Job75, comme tu l'as demandé et la macro n'a mias que quelques secondes pour s'exécuter !

Magnifique ! Je ne connaissais pas du tout et je pense que ça pourra m'aider à l'avenir.

Je ne sais pas si ça va résoudre mon problème global, car toutes mes formules mettent un temps fou à s'exécuter et certaines ne le font même pas d'ailleurs. Cependant, je vais pouvoir mettre des plages dynamiques dans mes formules, ce sera déjà ça de gagné !

Merci encore pour votre aide, Job75 et NezQuiCoule.

Bien cordialement.
 

Discussions similaires