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

Re, Je ne comprend plus.. Ma proposition supprime aussis les colonnes. Quelques explications sur LastCol :
VB:
Cells(1, Columns.Count).End(xlToLeft)
donne la dernière cellule remplie ligne 1 en partant de la derniàre cellule de la ligne 1 et en allant à gauche.
VB:
Cells(1, Columns.Count).End(xlToLeft).Offset(, 1)
Donne la cellule à coté (donc la prmière vide de la ligne 1
VB:
Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Address
Récupère l'adresse de cette cellule (Par exemple $G$1)
VB:
Split(Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Address, "$")
Découpe en tableau 'adresse de la cellule avec comme séparateur le $
VB:
Split(Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Address, "$")(1)
récupère la lettre de lm'adresse de la cellule (le tableu commence à 0 ,donnée vide avant le premier $, donc la lettre est en position (1) )Même chose pour :
VB:
Split(Cells(1, Columns.Count).Address, "$")(1)
Cela récupère les lettres de la dernère colonne (Compatible avec 2003 et 2007, 2010...) Cordialement
 
Dernière édition:
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Merci Efgé,

ma dernière remarque portait sur la manip manuelle : comment se fait-il que le CTRL maj flèche vers la droite SUPPR ne marche pas ?

Bien sûr que j'utilise ton code mais je l'avais restreint à ce que je comprenais jusqu'à présent. Avec tes dernières explications, c'est parfait et je pense que le fil en profitera également.

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

Re, Parceque la touche suppr ne delete pas les colonnes. il faut selectionner une colonne entière puis CTRL maj flèche vers la droite puis Clic Droit / Supprimer. Là c'est supprimer et non "vidé" des données. Pour t'en convaincre un petit test : ouvre un classeur neuf, sélectionne un cellule au milieu de ta feuile. écrit n'importe quoi. appui sur suppr. (tes données sont supprimées). Maintenant réécrit dans la cellule et clic droit / Supprimer. Là tu as un message te demandant des rensignements , tu clic dur OK Là tu as supprimé la cellule .Cordialement
 
Dernière édition:
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

Efgé,

c'est justement ce qui m'étonne car même en faisant CTRL maj flèche vers la droite clic droit supprimer, les colonnes sont vidées mais quand on fait F5 aller à la dernière cellule, le curseur se place là où précisément j'avais saisi pour le test.

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

salut

(interprétation personnelle donc fiabilité à confirmer)

Excel fait des sauvegardes à chaque action ne serait-ce que pour revenir à l'état après "Annulation(s) successive(s) d'action(s). D'où la prise de poids !
F5 ne tient pas compte pour certains points des sauvegardes d'où certains résultats inattendus (même après suppression manuelle n'est-ce pas Staple😉) !

Avec la dernière macro réduite
Code:
Sub Purger1()
  Rows(ActiveSheet.UsedRange.Row + 1 & ":" & Rows.Count).Delete
  MsgBox ActiveSheet.UsedRange.Row 'pour contrôle
End Sub
tout rentre dans l'ordre.
Les macros semblent avoir, sur le fichier, un impact plus étendu que ce que l'on voit; les sauvegardes qui s'en suivent ne sont pas identiques à celles des travaux manuels. Heureusement sinon on serait dans un monde d'obèses !

Finalement, quand on enregistre un fichier, on ne sait pas ce que l'on enregistre !
 
Re : Supprimer les lignes vides jusqu'à la fin de la feuille

bonjour tous🙂🙂🙂🙂

si tu demarre toujours en a1 & que se sont des données sans formule & mise en forme tu peus tenter cela

Code:
Sub es()
 Dim Ws As Worksheet, t()
 On Error Resume Next
 Application.ScreenUpdating = False
 For Each Ws In Worksheets
 With Ws
 t = .Range(.Cells(1, 1), .Cells(.Cells.Find("*", , , , , xlPrevious).Row _
 , .Cells.Find("*", , , , , xlPrevious).Column)).Value
 .Cells.Clear
 .[a1].Resize(UBound(t, 1), UBound(t, 2)) = t
 End With
 Erase t
 Next Ws
End Sub

j'ai souvent remarquée quand copiant la plage dans une autre feuille c'etait pas mal aussi
Code:
Range(Cells(1, 1), Cells(Cells.Find("*", , , , , xlPrevious).Row, Cells.Find("*", , , , , xlPrevious).Column)).Copy _
Destination:=Sheets("inter").Range("A1")

puis supprime l'anc... renomme la feuil
ect..
 
- 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