Excel VBA - Code Delete Row

Résolu/Fermé
Romdan Messages postés 9 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 9 mars 2010 - 22 janv. 2010 à 11:15
Romdan Messages postés 9 Date d'inscription lundi 26 octobre 2009 Statut Membre Dernière intervention 9 mars 2010 - 1 févr. 2010 à 11:29
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 jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
22 janv. 2010 à 11:20
Salut,

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

Non?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
22 janv. 2010 à 13:01
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 jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
22 janv. 2010 à 13:18
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 lundi 26 octobre 2009 Statut Membre Dernière intervention 9 mars 2010
22 janv. 2010 à 14:07
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 jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
22 janv. 2010 à 14:50
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
22 janv. 2010 à 18:00
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
22 janv. 2010 à 18:06
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 jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
23 janv. 2010 à 15:45
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
23 janv. 2010 à 10:10
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 lundi 26 octobre 2009 Statut Membre Dernière intervention 9 mars 2010
1 févr. 2010 à 11:29
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