XL 2010 supprimer les lignes dont la cellule en colonne p est un zéro

polyteis

XLDnaute Occasionnel
Bonjour,

j'ai trouvé ce petit code, qui à l'origine etait ecrit pour supprimer les cellules vides
je l'ai adapté pour des cellules à 0 de ma colonne p
quand je le lance j'ai une erreur " dépassement de capacité" .
mon tableau fait 50000 lignes
Sub Supprimer_zero()
Dim n As Integer
Application.ScreenUpdating = False
For n = Range("P65536").End(xlUp).Row To 9 Step -1
If (Range("P" & n) = 0) Then
Rows(n).Delete
End If
Next n
End Sub

y a t il un moyen de remedier a cela
merci
 

vgendron

XLDnaute Barbatruc
Bonjour

il vaudrait sans doute mieux appliquer un filtre sur la colonne P, puis supprimer les lignes résultantes de ce filtre
ou alors passer par un tablo vba (au vu des 50 000 lignes)

avec un fichir exemple, ca pourrait aider.. (pas besoin de mettre les 50 000 lignes) juste une dizaine suffit
 

Efgé

XLDnaute Barbatruc
Bonjour à tous
Dim n As Integer
Integer s'arrête à 32 737 donc 50 000 c'est trop pour le pauvre petit.
Utilise
VB:
Dim n as Long
Ou ne fait pas de boucle
Code:
Sub efface()
Dim Rng As Range
Set Rng = Range("q9:q" & Range("P65536").End(xlUp).Row)
With Rng
    .FormulaLocal = "=SIERREUR(LN(P9);"""")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Select
    'Ou
    '.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    If Err Then Err.Clear
    .ClearContents
End With
End Sub

Cordialement
 

polyteis

XLDnaute Occasionnel
Bonjour à tous

Integer s'arrête à 32 737 donc 50 000 c'est trop pour le pauvre petit.
Utilise
VB:
Dim n as Long
Ou ne fait pas de boucle
Code:
Sub efface()
Dim Rng As Range
Set Rng = Range("q9:q" & Range("P65536").End(xlUp).Row)
With Rng
    .FormulaLocal = "=SIERREUR(LN(P9);"""")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Select
    'Ou
    '.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    If Err Then Err.Clear
    .ClearContents
End With
End Sub

Cordialement
 

polyteis

XLDnaute Occasionnel
Bonjour à tous

Integer s'arrête à 32 737 donc 50 000 c'est trop pour le pauvre petit.
Utilise
VB:
Dim n as Long
Ou ne fait pas de boucle
Code:
Sub efface()
Dim Rng As Range
Set Rng = Range("q9:q" & Range("P65536").End(xlUp).Row)
With Rng
    .FormulaLocal = "=SIERREUR(LN(P9);"""")"
    .Value = .Value
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Select
    'Ou
    '.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    If Err Then Err.Clear
    .ClearContents
End With
End Sub

Cordialement
bonjour
je vais essayer cela
mais avant je vais tenter de comprendre ce code

merci
 

Discussions similaires

Réponses
6
Affichages
129
Réponses
7
Affichages
337

Statistiques des forums

Discussions
312 145
Messages
2 085 763
Membres
102 967
dernier inscrit
Syl34