2 votes

Excel VBA supprimer une ligne au-dessus d'un nombre dans une colonne

J'ai des chiffres dans la colonne A. J'essaie de développer un code VBA pour rechercher chaque chiffre dans la colonne A et supprimer une ligne au-dessus dès qu'il y a un chiffre dans la colonne A. Exemple :

Numéro dans A18 -> supprimer le numéro de ligne 17

Numéro dans A21 -> supprimer le numéro de ligne 20

Numéro en A33 -> supprimer le numéro de ligne 32

Ce code permet d'insérer une ligne au-dessus de la valeur de la colonne A. J'ai essayé de le modifier pour l'effacer :

Dim r6 As Range, r7 As Range
Set printareaP = ThisWorkbook.Worksheets("Pricelist")

With printareaP.Range("Print_Area")

   For Each r6 In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    If Not IsEmpty(r6.Value) Then
        If r7 Is Nothing Then
            Set r7 = r6
        Else
            Set r7 = Union(r7, r6)
        End If
    End If
Next r6

If r7 Is Nothing Then
Else
    r7.EntireRow.Delete
End If

Je reçois une erreur sur :

Set r7 = Union(r7, r6)

----------------EDIT-----------------------------------------------

J'ai trouvé ce code :

    With printareaP.Range("Print_Area")

    For Each Cell In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    If Not IsEmpty(Cell.Value) Then
        .Cells(Cell.Row - 1, 1).EntireRow.Delete
    End If
Next
End With

2voto

Lambik Points 520

Voici ma proposition :

Option Explicit

Sub test()

Dim r6 As Range, r7 As Range
Dim ws As Worksheet
Dim LastRow As Long
Dim printareaP As Range, Cell As Range

Set ws = ThisWorkbook.Worksheets("Pricelist")

LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set printareaP = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, 1))

For Each Cell In printareaP
    If IsNumeric(Cell.Value) Then
        ws.Cells(Cell.Row - 1, 1).EntireRow.Delete
    End If
Next Cell

End Sub

1voto

VBasic2008 Points 14466

Supprimer la ligne ci-dessus

Conseils

  • Lors du développement du code pour la suppression, il est préférable d'utiliser .Hidden=True au lieu de .Delete.
  • Vous pouvez utiliser Non (comme vous l'avez fait avec Empty) pour choisir le contraire (Union).
  • Lors de la suppression d'une ligne, il est préférable de commencer à partir de A2 car s'il se trouve dans A1, une erreur se produira.

Remarques

  • Vous avez oublié d'inclure Numérique .
  • Vous avez oublié de fermer le Avec ( Fin avec ).
  • Vous avez oublié de définir la ligne Décalage .
  • Vous avez utilisé l'approche la plus rapide en utilisant Union .

Le code

On suppose que Zone d'impression contient la partie pertinente de la colonne A . Si ce n'est pas le cas, supprimer .Range("Print_Area") du code.

Sub DeleteRowAbove()

    Dim r6 As Range, r7 As Range

    With ThisWorkbook.Worksheets("Pricelist").Range("Print_Area")

        For Each r6 In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
            If Not IsEmpty(r6) And IsNumeric(r6) Then
                If r7 Is Nothing Then
                    Set r7 = r6.Offset(-1, 0)
                  Else
                    Set r7 = Union(r7, r6.Offset(-1, 0))
                End If
            End If
        Next

    End With

    If Not r7 Is Nothing Then
        r7.EntireRow.Delete ' .Hidden = True 
        Set r7 = Nothing
    End If

End Sub

Belle approche. Continuez à faire du bon travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X