Filtre si valeur dans une céllule
Bonjour,
J'ai une macro qui me permet d'afficher les lignes dont il y a une valeur dans la cellule d'une colonne définie.
cela fonctionne mais le processus est très lent
Quelqu'un aurait une idée pour accélérer le processus :
Sub HideLines()
x = ActiveSheet.Name
y = ActiveCell.Column
With ThisWorkbook.Worksheets(x)
Application.ScreenUpdating = False
n = .Cells(.Rows.Count, 4).End(xlUp).Row
For i = 6 To n
If Application.WorksheetFunction.CountBlank(Range(Cells(i, y), Cells(i, y))) = 1 Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End With
End Sub
Merci à tous,
Loadlucas
Bonjour,
Tu te compliques la vie avec cette ligne :
If Application.WorksheetFunction.CountBlank(Range(Cells(i, y), Cells(i, y))) = 1 Then Rows(i).EntireRow.Hidden = TrueSauf erreur de ma part, tu cherches juste à savoir si la cellule est vide, ce que VBA fait très facilement avec :
If IsEmpty(Cells(i, y)) Then Rows(i).EntireRow.Hidden = TrueEnsuite, pour accélerer la macro, tu peux utiliser :
Application.ScreenUpdating = False 'Désactive l'affichage
Application.Calculation = xlCalculationManual 'Désactive le recalcule auto des formule Excel
'Ton code
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomaticEnfin, ta procédure peut être accélérée en utilisant plutôt un Auto Filtre (sélectionne tes en-têtes, puis "Données" --> "Filtrer"). Il suffit ensuite de s'inspirer du code obtenu par l'enregistreur de macro pour l'adapter à ton besoin. L'avantage est qu'il n'est pas nécessaire de parcourir ligne par ligne ton fichier, du moment que la plage de travail est correctement renseignée.
Super ça fonctionne parfaitement :
Sub HideLines()
x = ActiveSheet.Name
y = ActiveCell.Column
With ThisWorkbook.Worksheets(x)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
n = .Cells(.Rows.Count, 4).End(xlUp).Row
For i = 6 To n
If IsEmpty(Cells(i, y)) Then
Rows(i).EntireRow.Hidden = True
End If
Next i
End With
End SubJ'active cette macro via un bouton situé au dessus de la colonne à filtrer.
Auriez-vous une idée afin que la valeur y = ActiveCell.Column soit définie par mon clique de souris ?
Ainsi, si je clique sur le bouton dans la colonne où je veux filtrer, y = le numéro de la colonne.
Ceci, pour ne pas nettoyer malencontreusement une colonne non désirée si la cellule sélectionnée n'était pas dans la colonne à nettoyer (ActiveCell.Column).
Clique de souris = ActiveCell.Column
Cette méthode me permettrait de copier/coller les boutons dans les colonnes et feuilles que je désire en utilisant la même et unique macro
Merci à vous
Loadlucas

