Supprimer les lignes vides jusqu'à la fin de la feuille

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

dans des feuilles de travail, je copie, je supprime, j'ajoute des données de nombreuses fois si bien que mon fichier enfle dangereusement car il semble garder en mémoire la position du dernier enregistrement, même si les données n'y sont plus. Pour y remédier, je fais de temps en temps une purge manuelle consistant à me mettre sur la première ligne vide puis CTRL maj flèche vers le bas et suppr.

J'aimerais automatiser cette tâche car je rencontre le problème avec beaucoup de fichiers et d'onglets ...
Mon code plante là où je sélectionne la première ligne vide : incompatibilité de type ...

Qui a une idée ?

voici mon code :


Sub Purger()

Dim last As Variant
Dim ligne_libre As Variant

last = Range("A" & Rows.Count).End(xlUp).Row
MsgBox "La dernière ligne est la " & last & "ième" ' juste pour se contrôler ...
ligne_libre = last + 1
Rows("ligne_libre:ligne_libre").Select ' je sélectionne la première ligne vide ligne entière (mise en couleur pour contrôle visuel)
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp


End Sub




Merci d'avance pour vos lumières
 

Pièces jointes

Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonjour

attention quand tu utilises des variables, si tu les mets entre "" dans ton range, elles sont considérées comme des adresses

a essayer

Code:
Sub Purger()
Dim last As Variant
Dim ligne_libre As Variant
last = Range("A" & Rows.Count).End(xlUp).Row
MsgBox "La dernière ligne est la " & last & "ième" ' juste pour se contrôler ...
Rows(last + 1 & ":" & Rows.Count).Select
Selection.Delete Shift:=xlUp 

End Sub
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonjour.
VB:
Sub Purger()
Dim Last As Long
Last = Range("A" & Rows.Count).End(xlUp).Row
MsgBox "La dernière ligne est la " & Last & "ième" ' juste pour se contrôler ...
Rows(Last + 1).Resize(Rows.Count - Last).Delete
End Sub
Cordialement.
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonjour et merci pour vos contributions,

Danreb : j'avoue ne pas connaître la signification de Resize, donc il me reste à explorer ... mais ça fonctionne ! Cela dit, je préfère comprendre avant d'appliquer mécaniquement.

EricS : ça fonctionne impeccable. Si je lis la formule, ça signifie que je sélectionne depuis la première ligne vide jusqu'à la dernière colonne de cette même ligne ? Rows.count signifie la dernière colonne ?


Encore merci pour votre aide
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Re

non : rows.count est le nb de lignes du fichier (65536 sous 2003, plus de 100000 sous 2007 et suivants)
on sélectionne donc les lignes entières entre la dernière ligne +1 et la fin du fichier
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

j'ai un peu plus creusé la question et finalement je propose ce qui suit, un peu plus artisanal

Sub Purge_classique()
Dim last As Variant
Dim i As Variant
last = Range("A" & Rows.Count).End(xlUp).Row
i = last + 1 ' pour se mettre à la première ligne vide
Rows(i).EntireRow.Select ' avec cette nouvelle instruction, je sélectionne la ligne entière
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

End Sub


Encore merci pour vos lumières
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Vous avez des Select inutiles, et qui plantent par dessus le marché, on vous dit comment ne jamais en utiliser…
À quoi bon nous demander conseil si c'est pour ne pas les suivre 😡
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonsoir à tous

J'ai du mal à comprendre:
Quand on "supprime" des lignes vides dans Excel
Excel se fait une joie de nous récréer ne nouvelles lignes vides toutes fraîches.
Quel est donc l'intérêt de la manœuvre ?

Plutôt que supprimer, on peut aussi trier ses données, les lignes vides se placeront alors après les lignes contenant des données.
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonsoir à tous,
Je me permets cette incursion
Je pense que le vrai problème n"est pas forcément de supprimer les lignes vides, mais de limiter l'embompoint d'un fichier.
Je propose :
VB:
Sub Purger()
Dim lastRow As Long, LastCol As String
lastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
LastCol = Split(Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Address, "$")(1)

MsgBox "La première ligne vide est la " & lastRow & " ième" & vbLf & _
"La première colonne vide est la " & LastCol, 64, "juste pour se contrôler ..."

Application.ScreenUpdating = False
Rows(lastRow & ":" & Rows.Count).Delete
Columns(LastCol & ":" & Split(Cells(1, Columns.Count).Address, "$")(1)).Delete
Application.ScreenUpdating = True

ActiveSheet.UsedRange
End Sub

Je précise que
VB:
ActiveSheet.UsedRange
peut s'avérer très efficace dans certains cas.
Cordialement
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Re

Bonsoir Efgé

Dans ce cas, le demandeur devrait éditer le titre de son fil 😉

Mais je reste toujours aussi perplexe.
Si les lignes sont vraiment vides, les supprimer c'est les remplacer par de nouvelles lignes vides.

Et si on parle embonpoint, alors voir ceci
https://www.excel-downloads.com/threads/trop-gros.105390/
Ou la macro d'Hasco (snif) dans ce même fil
 
Dernière édition:
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonsoir Staple
Certe le titre peut nous enduire plein d'erreurs 😀
Mais Sebast nous avais laissé une piste :
...si bien que mon fichier enfle dangereusement car il semble garder en mémoire la position du dernier enregistrement, même si les données n'y sont plus....

Enfin, nous verrons bien

Cordialement

EDIT Tu édite plus vite que ton ombre....
 
Dernière édition:
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonjour à toutes et à tous,

Désolé pour cette réponse tardive mais j’ai eu un contretemps et j’ai voulu mettre en œuvre chaque solution proposée.

Je m’étais avancé un peu vite hier en affirmant que certaines propositions fonctionnaient. En fait, pour un contrôle plus rapide, j’avais mis en couleur des lignes sous le bloc de données de mon fichier, ce qui permettait un contrôle visuel très rapide.
MAIS en tapant F5 et dernière cellule, je me suis rendu compte que le code n’était pas allé chercher la dernière contenant un élément (ici invisible : il avait dû y avoir une valeur avec une mise en forme, effacée depuis mais qui fait que le fichier devient obèse car apparemment, Excel considère que la feuille va du début A1 jusqu’à cette cellule placée très loin du début !) …

Effectivement, je m’étais peut-être mal exprimé, ma demande n’était pas de supprimer des lignes juste pour le plaisir mais bel et bien parce que mes fichiers gonflent du fait de la présence d’éléments (invisibles à l’œil …)

Pour répondre aux uns et aux autres :

Danreb : contrairement à ce que je pensais, le code suivant ne va pas chercher la dernière ligne ayant contenu une donnée

Sub Purger()
Dim Last As Long
Last = Range("A" & Rows.Count).End(xlUp).Row
MsgBox "La dernière ligne est la " & Last & "ième" ' juste pour se contrôler ...
Rows(Last + 1).Resize(Rows.Count - Last).Delete
End Sub

Par ailleurs, je suis désolé d’avoir « bricolé » une solution avec des Select (d’autant qu’elle ne marche pas) mais c’était pour moi quelque chose de plus « compréhensible », même si effectivement, le Select est à bannir.


Eric S : même constat, ça semble fonctionner mais ne va pas chercher la dernière ligne ayant contenu une donnée

SI … : idem

Staple 1600 : tu as mis le doigt sur le problème, j’aurais dû formuler ma demande plus précisément, en l’intitulant «besoin d’une cure d’amaigrissement »

Efgé : tu es clairvoyant et ton code marche !


Par ailleurs, comme mes données « enflant » sont toujours les mêmes dans leur structure, ce n’est qu’en nombre de lignes que se pose le problème et pas en colonne. Donc, comme j’ai du mal à comprendre la ligne
LastCol = Split(Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Address, "$")(1),
J’ai restreint le code à :

Sub Purge_autre()
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1

Application.ScreenUpdating = False
Rows(lastRow & ":" & Rows.Count).Delete
Application.ScreenUpdating = True

ActiveSheet.UsedRange
End Sub

Et ça marche (vu que les données que j’ajoute, enlève etc. sont toujours sur colonne de A à G, le seul élément variable étant le nombre de lignes …)

Mais par curiosité, j’ai saisi en cellule Z250000 un chiffre, que j’ai mis en forme puis j’ai tout effacé.
A la mano, avec CTRL maj flèche vers la droite et SUPPR, je supprime les colonnes (donc yc la colonne Z)
Malheureusement, cette manip reste sans effet ! Quand je saisis F5 dernière colonne, je vois que le curseur saute en Z250000.

Comment se fait-il que ma purge manuelle (allant de G à XFD) n’a pas été prise en compte ?

Merci pour vos lumières et surtout de vous être penché sur mon cas hier soir
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Bonjour Sebast, Bonjour le fil. Je pense que ta manip manuelle ne "Delete" pas les cellules mais fait une forme de ClearContents (cela enlève les données sans toucher aux mise en forme). Donc Excel retrouve la mise en forme qui est restée. Enfin, je pense... Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
908
Retour