Supprimer plusieurs lignes dans un fichier Excel

Bonjour Forum,

j'ai un fichier volumineux qui fait plus de 60.200 lignes, parmi lesquelles des lignes vides.

J'aimerais pouvoir supprimer toutes les vides avec une seule macro.

Rassurer vous j'ai déjà regarder plusieurs solutions proposées sur le forum, mais malheureuse elles ne fonctionnent pas.

Merci de votre aide.

Bonjour, si une des cellules de la colonne A est vide ; cela veut-il dire que cette ligne sera vide ?

Sub Macro1()
Dim derlign As Long
derlign = Range("A65536").End(xlUp).Row

For i = derlign To 1 Step -1
If Range("A" & i).Value = "" Then
Rows(i).Delete Shift:=xlUp
End If
Next
'
End Sub

Bonjour

un exemple

Option Explicit

Const TARGET_SHEET_NAME As String = "DATA" 'A remplacer par le nom de l'onglet que vous voulez traiter.

Sub supprimer_lignes_vides()

Dim RowNumber As Integer

Sheets(TARGET_SHEET_NAME).Activate

RowNumber = Cells.SpecialCells(xlCellTypeLastCell).Row

Do While RowNumber > 0

If Rows(RowNumber).Find("*") Is Nothing Then Rows(RowNumber).Delete

RowNumber = RowNumber - 1

Loop


End Sub

Bonsoir, merci pour vos réaction,

cependant j'ai essayer les deux solutions :

la première n'a aucun effet sur le document,

la deuxième me renvoi le message suivant : erreur d'exécution "9':

l'indice n'appartient pas a la sélection.

NB: je suis très nouveau avec VBA.

erreur vba

Re bonjour,

J'ai testé avant de poster donc si aucun effet sur votre fichier j'imagine qu'il n'y a aucune info en colonne A ?

ou alors les vides ne le sont pas réellement si il y a une formule ?

à quoi ressemblent vos lignes ?

Je viens de refaire un test avec le code transmis à 15h11 et cela fonctionne

Peux tu nous joindre un exemple de ton fichier

Voici ce a quoi ressemble les deux premières colonnes de mon doc

22exempleforvba.zip (869.69 Ko)

Bonjour,

Attention aux variables représentant des lignes dimensionnées en "Integer" ! Le "Long" est mieux car le Integer est limité à 32000 et des poussières !

@ bientôt

LouReeD

Bonjour LouReeD

Je viens de voir une chose bizarre concernant les lignes vides

il faut la sélectionner taper sur la touche Suppr ( a croire qu'il y a quelque chose sur la ligne)

et ensuite activer la macro,et là, la ligne vide est supprimée... BIZARRE

JOCO je pense que j'ai la cause:

quand je me place sur les cellules d'une ligne vide et que je clique deux fois, je me rend compte que la cellule comporte des caractères "espace".

et donc il faut les supprimer pour le code puisse éliminer la ligne.

Fais un tri des colonnes A et B du plus petit au plus grand

Tu vas voir ligne 2 et 3 des données (a quoi servent elles?)

Ainsi que lignes 61285 a 61290

Si tu supprimes cela ,la macro pour supprimer les lignes vides fonctionne

Ligne 61285 avec RowNumber en Integer ça passe pas, il faut du "Long"...

@ bientôt

LouReeD

LouReed, j'ai remplacer le Interger par Long et ca marche.

mais il y a des lignes (vides au premier aperçu) qui comportent des espaces et qui devraient être la cible du code du coup ca marche a conditions que ces espèces soient supprimés a l'avance.

cependant vu le nombre de ligne qu'il y'a dans le fichier il serait de les supprimer un a un.

Bonsoir, j'avais effectivement vu aussi les cellules qui comporte des espaces. elles possèdent toutes le même nombre d'espaces il me semble.

Du coup cette modif devrait fonctionner :

Sub Macro1()
Dim derlign As Long
derlign = Range("A65536").End(xlUp).Row

For i = derlign To 1 Step -1
If Range("A" & i).Value = "" Or Range("A" & i).Value = "               " Or Range("A" & i).Value = " " Then
Rows(i).Delete Shift:=xlUp
End If
Next
End Sub

Nota uniquement si les lignes vides sont considérées comme vides si il n'y a pas d'info en colonne A.

Pour info Toutes les lignes n'ont pas forcément le même nombre d'espaces. apparemment soit plusieurs, soit 1seul espace ;

code modifié

J'ai testé sur votre exemple celà fonctionne apparemment.

Bonsoir,

avec le fichier c'est mieux ! En fait en colonne A vous n'avez que des chiffres ! En reprenant et simplifiant le code de Xmenpl :

Sub Macro1()
    Application.ScreenUpdating = False
    For i = Range("A65536").End(xlUp).Row To 2 Step -1
        If Not IsNumeric(Range("A" & i).Value) Then Rows(i).Delete
    Next
End Sub

@ bientôt

LouReeD

Bonjour les amis,

Merci á LooReed , á Xmenpl et aux autres.

le dernier code assure.

En attendant j'aimerai comprendre la signification de : "Range("A65536").End(xlUp).Row" dans la boucle For.

Bonjour

Pour être plus precis et compatible avec les versions Excel il faudrait mettre : Range("A" & Cells.Rows.Count).End(xlUp).Row

Ceci demande à VBA de pattir de la cellule la plus basse de la colonne A (donc ligne 65536 pour Excel 2003 et inférieur et 1 048 576 pour Excel 2007 et plus, en remplaçant par Cells.Rows.Count on trouve à chaque fois la bonne valeur quelque soit la version) et de remonter "xlUp" pour trouver la dernier cellule non vide de la colonne et on en prend son numéro ".Row".

C'est l'equivalent de "Shift" + "Ctrl" + "flèche vers le haut" en ayant sélectionné la dernière cellule de la colonne auparavant.

@ bientôt

LouReeD

Même avis .. le dernier code assure ! trés astucieux le numéric pour virer les autres caractères : LouReed

Bon travail collégial !

@ bientôt

LouReeD

Rechercher des sujets similaires à "supprimer lignes fichier"