Bonjour à tous,
fcyspm30 : xorsankukai ta macro va très vite. Te serait-il possible de la commenter?
Sub SupprActive()
Dim plage As Range
Application.ScreenUpdating = False 'désactive le rafraichissement de l'écran
Application.Calculation = xlCalculationManual 'passe le calcul en mode manuel
Application.DisplayAlerts = False 'désactive les messages d'alerte
With Sheets("PARAMETRE") 'agit sur cette feuille uniquement
'si le tableau ne contient aucune donnée, on quitte la procédure
If .ListObjects("Tableau47").DataBodyRange Is Nothing Then Exit Sub
' si le tableau est déjà filtré, on enlève le(s) filtre(s)
If .ListObjects("Tableau47").ShowAutoFilter Then .ListObjects("Tableau47").AutoFilter.ShowAllData
'on filtre le tableau sur la colonne ACTVATION avec ACTIVE comme critère
.Range("Tableau47").AutoFilter Range("Tableau47").ListObject.ListColumns("ACTIVATION").Index, "ACTIVE"
On Error Resume Next 'si une erreur est générée, on l'ignore
'définit plage qui contient le résultat du filtre (les cellules visibles après filtre)
Set plage = Range("Tableau47").SpecialCells(xlCellTypeVisible)
If Err = 0 Then 'si aucune erreur, donc si il y a des lignes filtrées
'on efface les données filtrées
Range("Tableau47").ListObject.DataBodyRange.Delete
End If
On Error GoTo 0 'réinitialise la gestion des erreurs
Range("Tableau47").ListObject.AutoFilter.ShowAllData 'enlève le(s) filtre(s)
End With
Application.ScreenUpdating = True 'réactive le rafraichissement de l'écran
Application.Calculation = xlCalculationAutomatic 'repasse le calcul en automatique
Application.DisplayAlerts = True 'réactive les messages d'alerte
End Sub
L'utilisation du filtre permet d'éviter de boucler sur chaque ligne et donc de diminuer considérablement le temps d’exécution.
Sinon, il faudrait utiliser des variables tableaux pour travailler en mémoire....mais plus compliqué à mettre en œuvre.
@LINSONN : merci pour ce retour, , j'essaie simplement d' appliquer les enseignements du forum,
Il ne faut pas hésiter à tester, on peut toujours compter sur les pros du forum pour corriger nos erreurs et nous aider à progresser.
Bonne continuation,
Cordialement,