[VBA] masquer une ligne si une des valeur = 0

Kwantos

XLDnaute Nouveau
Bonjour à tous,

Voici mon problème:

Je dois administrer un tableur dans lequel figure toute une série de renseignements dont, en colone H, une valeur numérique.

Je voudrais masquer les lignes entières pour lesquelles la valeur en H est égale à 0.

Sur excel 2003, j'utilisais ce code:

Dim I As Long
Dim Plage As Range
Set Plage = Range("H1:H" & Range("H1").End(xlDown).Row)
For I = Plage.Cells.Count To 1 Step -1
If Plage.Cells(I).Value = 0 Then
Plage.Cells(I).EntireRow.Hidden = True
End If
Next

Celà fonctionnait parfaitement et en un claquement de doigt le tour était joué.

Malheureusement, mon boss a cru bon de changer et de passer sous la suite office 2007.

Ce code fonctionne toujours aussi bien, mais mon problème est que ca prends facilement 2-3 minutes pour faire le tri sur 1200 lignes... et ce fichier pourrait atteindre très vite les 10.000 lignes... ca prendra alors beaucoup trop de temps.

Auriez-vous un autre code que celui-ci qui ferait la même chose, mais qui irait plus vite?

Merci d'avance pour vos lumières.
 

Papaye

XLDnaute Occasionnel
Re : [VBA] masquer une ligne si une des valeur = 0

Bonjour,

J'ai essayé ce code chez moi :

PHP:
Sub toto()
Application.ScreenUpdating = False
For i = 2 To Range("A65536").End(xlUp).Row
  If Cells(i, 8) = 0 Then Rows(i).EntireRow.Hidden = True
Next i
Application.ScreenUpdating = True
End Sub
Cela ne prend pas plus de 5 secondes pour 30 000 lignes
 

Kwantos

XLDnaute Nouveau
Re : [VBA] masquer une ligne si une des valeur = 0

Merci pour l'info, mais quand je lance la macro que tu m'as donné, il me met un message d'erreur dans microsoft virtual basic qui dit :

"Erreur de compilation : projet ou bibliothèque introuvable" en surlignant le I de la formule 'For I = 2 to Range ...'

Une idée de ce que ca pourrait être?
 

Papaye

XLDnaute Occasionnel
Re : [VBA] masquer une ligne si une des valeur = 0

Ah.............. C'est pas mal, ça !
Tu dois avoir une boucle "for i ..." qui traîne déjà dans ta macro ou une variable I déclaré ailleurs.

Pour faire simple :
change tous les i de ma macro par des iii ou des turlutu

PHP:
Sub titi()
Application.ScreenUpdating = False
For iii = 2 To Range("A65536").End(xlUp).Row
  If Cells(iii, 8) = 0 Then Rows(iii).EntireRow.Hidden = True
Next iii
Application.ScreenUpdating = True
End Sub
 

Cousinhub

XLDnaute Barbatruc
Re : [VBA] masquer une ligne si une des valeur = 0

Bonjour,

pour ton problème de bibliothèque, regarde, dans l'éditeur VBE, dans Outils/Références.
Tu dois avoir un MANQUANT (décoche-le), normalement cela devrait être bon

Pour ton problème de lenteur, est-ce que les valeurs dans la colonne H sont des résultats de formule, ou des valeurs numériques entrées à la main?
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] masquer une ligne si une des valeur = 0

Bonsoir



Une autre façon de faire

Code:
Sub masquer_zeros()
'source: Dave Hawley
Dim l_zero&
Dim i&
Dim c_zero As Range
Application.ScreenUpdating = False
With Range("H1:H" & [H65536].End(xlUp).Row)
l_zero = WorksheetFunction.CountIf(.Cells, 0)
If l_zero > 0 Then
Set c_zero = .Cells(1, 1)
For i = 1 To l_zero
Set c_zero = .Cells.Find(0, c_zero, xlValues, xlWhole, xlRows, xlNext, False)
c_zero.EntireRow.Hidden = True
Next i
End If
End With
Application.ScreenUpdating = True
End Sub
 

skoobi

XLDnaute Barbatruc
Re : [VBA] masquer une ligne si une des valeur = 0

Bonjour le fil,

Je suppose que tu ne veux pas utiliser le filtre automatique, en choisissant personnalisé puis <> 0, dans le cas contraire, c'est la solution la plus rapide.
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 403
Membres
103 537
dernier inscrit
alisafred974