J'utilise vba pour essayer d'effacer une colonne de la ligne 10 à la dernière ligne utilisée.

Le problème que j'ai est que certaines de mes valeurs ont des lacunes comme ceci:

1
2
3

5
6
7

8
9

Voici mon code:

Sub Clear2()
ActiveSheet.EnableCalculation = False
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

With Sheets(1)
    .Range("H10:H" & .Range("H10").End(xlDown).Row).ClearContents
    .Range("I10:I" & .Range("I10").End(xlDown).Row).ClearContents
    .Range("J10:J" & .Range("J10").End(xlDown).Row).ClearContents
    .Range("K10:K" & .Range("K10").End(xlDown).Row).ClearContents
    .Range("L10:L" & .Range("L10").End(xlDown).Row).ClearContents
    .Range("M10:M" & .Range("M10").End(xlDown).Row).ClearContents


End With
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
ActiveSheet.EnableCalculation = True
End Sub

Le problème que j'obtiens est que mon code n'efface que jusqu'à la première ligne vide, puis n'efface rien après comme ceci:

5
6
7

8
9

S'il vous plaît, quelqu'un peut-il me montrer la bonne façon de faire cela?

1
user7415328 16 janv. 2017 à 13:05

2 réponses

Meilleure réponse
With Sheets("mysheet") '<--| change "mysheet" to your actual sheet name
    Intersect(.Range(.Rows(10), .UsedRange.Rows(.UsedRange.Rows.Count)), .Range("H:M")).ClearContents
End With

Il utilise

  • Notation Range(range1, range2)

    pour renvoyer un range s'étendant de range1 à range2 plages

  • Notation Range("Col1:Col2")

    pour renvoyer un range s'étendant entre les colonnes Col1 et Col2

  • UsedRange propriété de l'objet Worksheet

    pour renvoyer une plage rectangulaire qui englobe toutes les cellules réellement "utilisées" (c'est-à-dire non vides ou formatées)

Donc:

  • .Range(.Rows(10), .UsedRange.Rows(.UsedRange.Rows.Count))

    récupère toutes les cellules de la ligne 10 à la dernière ligne "utilisée"

  • .Range("H:M")

    obtient toutes les cellules de la colonne H à M

  • en coupant les deux plages ci-dessus, vous obtenez la plage souhaitée pour effacer le contenu de

1
user3598756 16 janv. 2017 à 12:03

Cela devrait fonctionner.

Option Explicit

Sub Clear2()

    ActiveSheet.EnableCalculation = False
    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False

    With Sheets(1)

        .Range("H10:H" & .Cells(Rows.Count, "H").End(xlUp).Row).ClearContents
        .Range("I10:I" & .Cells(Rows.Count, "I").End(xlUp).Row).ClearContents
        .Range("J10:J" & .Cells(Rows.Count, "J").End(xlUp).Row).ClearContents
        .Range("K10:K" & .Cells(Rows.Count, "K").End(xlUp).Row).ClearContents
        .Range("L10:L" & .Cells(Rows.Count, "L").End(xlUp).Row).ClearContents
        .Range("M10:M" & .Cells(Rows.Count, "M").End(xlUp).Row).ClearContents

    End With
    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.EnableEvents = True
    ActiveSheet.EnableCalculation = True

End Sub
0
Jean-Pierre Oosthuizen 16 janv. 2017 à 10:18