OVH Cloud OVH Cloud

Macro suppresion ligne vide

3 réponses
Avatar
OLS
Bonjour,

Quelqu'un pourrait il m'aider en m'écrivant une macro qui séléctionnerait
une feuille entière et qui supprimerrait toute ligne vide.
Merci

Possibilité de me répondre par mail

--
OLS

3 réponses

Avatar
Daniel.j
Bonsoir,
par exemple
derLigne = ActiveSheet.Rows.Count
Application.ScreenUpdating = False
For r = derLigne To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Mais cela risque d'être un peu long !
Il vaudrait mieux limiter à la zone en cours.
ActiveSheet.UsedRange.Rows.Count
--
Daniel MVP Excel
FAQ du Forum Microsoft Public Fr Excel
http://dj.joss.free.fr/faq.htm


"OLS" a écrit dans le message de news:
boe2ho$3ct$
| Bonjour,
|
| Quelqu'un pourrait il m'aider en m'écrivant une macro qui séléctionnerait
| une feuille entière et qui supprimerrait toute ligne vide.
| Merci
|
| Possibilité de me répondre par mail
|
| --
| OLS
|
|
Avatar
Michel Gaboly
Bonsoir,

Par sécurité, avant d'effectuer la manip qui suit, je conseille d'enregistrer
le document pour pouvoir revenir aisément à l'état initial en cas de mauvaise
surprise, dûe à la structure des données sur la feuille.


Pour les feuilles contenant beaucoup de lignes le plus rapide, selon moi
est d'insérer une colonne dans laquelle on inscrit le numéro de ligne
(directement la valeur, sans la fonction LIGNE()).

Ensuite, on sélectionne la zone utile de la feuille, et on fait un tri sur
une colonne contenant des données (autre que celle que l'on vient d'insérer)

Le tri a pour intérêt de regrouper les lignes vides, ce qui permet de toutes
les supprimer en une fois.

On retrie en utilisant la colonne ajoutée, afin de rétablir l'ordre initial, et
on supprime cette colonne.

Si c'est ponctuel cela peut se faire à la main, sinon en macro, cela donne :


Sub SuppLignesVides()
Dim Ref As Range, i As Long, j As Long
j = ActiveSheet.UsedRange.Rows.Count
' Insertion de la colonne destinée à retrouver l'ordre initial des lignes
Range("A:A").Insert
' Numérotation des lignes
Set Ref = Range("A1")
With Ref
.Value = 1
.AutoFill Range(Ref, .Offset(j - 1)), xlFillSeries
End With
' Tri pour regrouper les lignes vides.
' NB - la colonne à utiliser pour le tri doit être choisis en fonction des
' données de la feuille. Cette instruction peut nécessiter une adaptation.
ActiveSheet.UsedRange.Sort Range("B1")
i = Range("B1").End(xlDown).Row + 1
' Suppression des lignes vides
Rows(i & ":" & j).Delete
ActiveSheet.UsedRange.Sort Range("A1")
Range("A:A").Delete
End Sub


La colonne utilisée pour trier les données et regrouper les lignes vides doit être
choisie avec soin en fonction des données. La première instruction de tri peut
également nécessiter une adaptation, pour les mêmes raisons, ce qui justifie la
mise en garde initiale (enregistrement préalable du document vivement conseil-
lée).



Bonsoir,
par exemple
derLigne = ActiveSheet.Rows.Count
Application.ScreenUpdating = False
For r = derLigne To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Mais cela risque d'être un peu long !
Il vaudrait mieux limiter à la zone en cours.
ActiveSheet.UsedRange.Rows.Count
--
Daniel MVP Excel
FAQ du Forum Microsoft Public Fr Excel
http://dj.joss.free.fr/faq.htm

"OLS" a écrit dans le message de news:
boe2ho$3ct$
| Bonjour,
|
| Quelqu'un pourrait il m'aider en m'écrivant une macro qui séléctionnerait
| une feuille entière et qui supprimerrait toute ligne vide.
| Merci
|
| Possibilité de me répondre par mail
|
| --
| OLS
|
|


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
OLS
Merci pour vos réponses

OLS
"OLS" a écrit dans le message de news:
boe2ho$3ct$
Bonjour,

Quelqu'un pourrait il m'aider en m'écrivant une macro qui séléctionnerait
une feuille entière et qui supprimerrait toute ligne vide.
Merci

Possibilité de me répondre par mail

--
OLS