Excel VBA - Code Delete Row

Résolu
Romdan Messages postés 11 Statut Membre -  
Romdan Messages postés 11 Statut Membre -
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
Configuration: Windows XP Internet Explorer 6.0

9 réponses

  1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut,

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

    Non?
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  4. Romdan Messages postés 11 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
       
      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
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,
    Excusez le doublon, mais hier-fin d'aprem CCM ne montrait pas que le message était posté
    0
  10. Romdan Messages postés 11 Statut Membre
     
    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