Excel VBA - Code Delete Row

Résolu
Romdan Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
Romdan Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde!
J'ai un souci avec un code VBA. Impossible de m'en sortir.
Je dispose d'un listing importe d'une page internet et que je souhaiterais nettoyer des lignes blanches qu'il comprend.

1. Le listing a son en-tete de colonne en ligne 4 et la premiere data est en A5
2. Je souhaite que l'epuration stoppe des lors que la boucle rencontre 2 lignes blanches successives. (implicitement, ca signifie que c'est la fin du listing).

J'ai tapé un petit code:

--------------------------------------------------------------------

Sub ()

Sheets("JIRA Extract").Select
Dim c As Integer
Dim d As Integer
c = 0
d = 1

Do While Range("A5").Offset(c, 0) <> "" And Range("A5").Offset(d, 0) <> ""
If Range("A5").Offset(c, 0) = "" Then
Range("A5").Offset(c, 0).EntireRow.Delete
c = c + 1
d = d + 1
End If
Loop

End Sub ()

--------------------------------------------------------------------

Pouvez-vous m'aider, je sais qu'il y a quelques pros qui pourront me sortir de ce probleme :)
Merci a tous de m'avoir lu jusque la!
Romdan

9 réponses

teebo Messages postés 33491 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut,

If Range("A5").Offset(c, 0) = "" AND Range("A5").Offset(d, 0) <> ""  Then 

Non?
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,

Sans boucler
Sub Supprimer_si_vide()
    Dim Ligne As Long
    'on pourrait écrire activesheet au lieu de "Me"
    Ligne = Me.UsedRange.Rows.Count
    Me.Range("A:A" & Ligne).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
0
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Bonjour,
juste une tite correction en passant :
Sub Supprimer_si_vide()
    Dim Ligne As Long
    'on pourrait écrire activesheet au lieu de "Me"
    Ligne = Me.UsedRange.Rows.Count
    Me.Range("A5:A" & Ligne).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

et une ptite remarque aussi (déjà présente en commentaire ds le code de michel_m) : il est préférable d'utiliser ActiveSheet à Me, Me ne fonctionnera que si le code est placé ds la feuille concernée, ne fonctionne pas depuis un module, userform ou ThisWorkbook....
EDIT : autre remarque, il serait préférable d'utiliser Ligne = ActiveSheet.range("A65536").End(xlUp).row (cas de lignes vides entre A1 et A5, les dernieres lignes ne seraient pas traitées....). A noter également qu'une erreur est renvoyée si aucune cellule vide n'est trouvée en colonne A...
0
Romdan Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Merci !
Voila la ligne que j'ai integré grace a votre aide

' Clean JIRA Extract Data
Sheets("JIRA Extract").Activate
ActiveSheet.Range("A5:A500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Le fait est que maintenant, la macro saute quand il n'y a justement plus de ligne blanche a supprimer.
Il me reste a mettre cette opération conditionnelle. Avez vous une idée?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Salut,

Sheets("JIRA Extract").Activate
On error resume next
if not iserror(ActiveSheet.Range("A5:A500").SpecialCells(xlCellTypeBlanks)) then
ActiveSheet.Range("A5:A500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end if
on error goto 0

ça devrait le faire....
EDIT : un simple On error resume next....On error goto 0 aurait suffit, mais tu parlais de conditionnel....
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bin...pinaillons

on error resume next & on error goto 0 est maladroit

Sub pinailler()
With Sheets("JIRA Extract")
derlig = Range("A65536").End(xlUp).Row 'il est inutile de supprimer des lignes, passé la dernière ligne occupée, donc le A5:A500 est est à éviter s'il n'y a rien dessous
On Error GoTo erreur: 'autant que faire se peut, il faut regrouper les sorties de macro
     .Range("A5:A" & derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
erreur:
End Sub



0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bin, pinaillons...

Sub pinailler()
With Sheets("JIRA Extract")
derlig = Range("A65536").End(xlUp).Row 'il est inutile de supprimer des lignes, passé la dernière ligne occupée...s'il y a des données sous A 500 on remplace 65536 par 500l 
On Error GoTo erreur: 'préférable à resume next (à réserver pourles boucles); dans les 2 options le "if" était inutile
     .Range("A5:A" & derlig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
erreur:
End Sub
0
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   435
 
Re,
tt à fait d'accord, c un peu maladroit mais justement c'est bien pour faire le If que je faisait tout ça : "reste a mettre cette opération conditionnelle" => du coup on peut gerer le If iserror directement à ce niveau du code, sans renvoi ni sortie et le on error goto 0 retablit le truc pour continuer à executer du code (inutile ds ce cas là jdois bien dire)....
et pis ct pas vraiment du pinaillage, au contraire, j'avais jamais utillsé cette "façon" pour supprimer les lignes vides (specialcells) du coup jcolle ça ds un module de test => erreur (Me) ; je mets activesheet, teste une fois c nickel, jle refais sur une autre feuille avec plus de données et là erreur encore pour cause j'ai pas de ligne vides....d'où mon intervention...:)
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,
Excusez le doublon, mais hier-fin d'aprem CCM ne montrait pas que le message était posté
0
Romdan Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour tout le monde,
Voici la solution que j'ai mis en place grace a vous.
Dans l'import de la feuille JIRA Extract, j'insere une ligne blanche histoire qu'il y en ait au moins une...et ensuite je demande a supprimer toute les lignes entre la ligne 2 et 500 qui sont vides.
De cette facon, la macro tourne parfaitement.
Merci a tous pour votre aide, vive CCM ;)
Romdan

' Clean JIRA Extract Data of blank rows

Sheets("JIRA Extract").Activate
Rows("11:11").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveSheet.Range("A2:A500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
0