Supprimer lignes si la donnée de la colonne est vide

Bonjour,

j’aimerais faire un code qui dit si les valeurs d’une des cellules de la colonne A est vide alors je supprime la ligne correspondante.

J’ai déclaré les variables suivantes :

Dim wkbSource As Workbook
Dim wkbdestination As Workbook
Dim NouvelleFeuille As Worksheet
Dim Fichier As String, Chemin As String
Set monWb = Application.ActiveWorkbook

J’ai écrit le code suivant que j’ai inséré dans des lignes de codes existants qui fonctionnent

monWb.Worksheets(« PRE IMPORT »).Select
Dim cell_i ’ cellule de départ ‹ A1 › (la colonne A est donc la colonne de référence qui sera parcouru jusqu’à rencontrer une cellule vide)
Set cell_i = Range(« A1 »)
While (cell_i.Value <> «  »)
Set cell_mi = cell_i
Set cell_i = cell_i.Offset(1, 0)
’ offset : ligne, colonne ici on décale de une colonne : soit B1 quand la cellule de départ est A1
If (cell_mi.Offset(0, 1).Value = «  ») Then
cell_mi.EntireRow.Delete
End If
Wend
End Function

j’ai une suite qui fonctionne bien
Au lancement de la macro , j’ai le message suivant : « erreur de compilation End Sub attendu »

Auriez vous une idée ?
cela fait longtemps que je n’ai pas touché à VBA
merci d’avance

Bonjour

« Au lancement de la macro , j’ai le message suivant : « erreur de compilation End Sub attendu » »

Une macro débute toujours par Sub nomdelamacro() et se termine toujours par End Sub
comme ceci :

Sub nomdelamacro()

lignes de code

End Sub

Pour les fonctions même principe mais comme ceci :

Function nomdelafonction()

Lignes de code

End Function

Si c’est une macro premier scénario
Si c’est une fonction deuxième scénario

Quelque soit le scénario les 2 lignes début et fin sont obligatoires

Attention ici :

Set cell_i = cell_i.Offset(1, 0)

Tu décales d’une ligne non pas d’une colonne comme exprimé dans ton commentaire :

’ offset : ligne, colonne ici on décale de une colonne : soit B1 quand la cellule de départ est A1

Et non c’est
’ offset : ligne, colonne ici on décale de une ligne : soit A2 quand la cellule de départ est A1

Espérant avoir répondu à ton attente

Bonjour,

La ligne max et à combien?
Car la ligne max est à 1 048 576 lignes. (il mettra de temps pour vérifier toutes les lignes.)

Cordialement
Will-Fread

Re,
While n’est pas conseillée pour ce type de boucle,

Utiliser For et c’est à vous de limiter combien de fois ou bien jusqu’à combien de ligne vous voulez.
Exemple pour 27 lignes: de A1 à A27:

Sub Verification()
Dim a As Integer
Range("A1").Select
For a = 0 To 26
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(1, 0).Select
Next
End Sub

Boucle de suppression de ligne.xlsm (23,3 Ko)

Cordialement
Will

Bonjour,
Ta macro n’est pas très bonne Jacquinot
Il te reste des cellules vides
Sur ce type de demande; il faut commencer par la dernière ligne et non à la première
Fichier avec ton exemple rectifié
Boucle de suppression de ligne.xlsm (17,4 Ko)

1 « J'aime »

Bonjour,
Ah oui, je l’ai pas révisé avant de l’envoyer, bien vu.
Merci @Mimimathy

Re,
J’ai pas pu calculer le retour en arrière au cas où on croise plusieurs lignes vides :laughing: :laughing:

et cette ligne : Range("A" & Rows.Count).End(xlUp).Row :scream: :scream: est parfaite

Re,

Si, avec une ligne de plus sur ta macro, mais cela oblige le retour d’une ligne en arrière à chaque suppression, alors sur une grande plage, c’est du temps supplémentaire et ce n’est pas le bon principe
Avec ta macro

Sub Verification()
Dim a As Integer
Range("A1").Select
For a = 0 To 26
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete

ActiveCell.Offset(-1, 0).Select

End If
ActiveCell.Offset(1, 0).Select
Next
End Sub
1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.