Rendre ma macro plus rapide EXCEL VBA
Bonjour,
Je cherche de l'aide pour rendre ma macro plus rapide...
cette MACRO, supprime toutes les lignes, qui ne contiennent pas l'agence nommée "Agence Tours"
La feuille "TEST" contient + de 85000 lignes
C'est très long ! Y'a t'il un moyen de réduire considérablement le délai d'exécution ?
Merci d'avance !
Je cherche de l'aide pour rendre ma macro plus rapide...
Sub SupAutres_Agences()
'
Application.ScreenUpdating = False 'Empêche le rafraichissement de l'écran
Worksheets("TEST").Select ' sélection feuille ou se trouve les lignes à supprimer
For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Not Cells(i, 1) Like "*Tours*" Then Rows(i).Delete
'suivant
Next
'
Application.ScreenUpdating = True
'
End Sub
cette MACRO, supprime toutes les lignes, qui ne contiennent pas l'agence nommée "Agence Tours"
La feuille "TEST" contient + de 85000 lignes
C'est très long ! Y'a t'il un moyen de réduire considérablement le délai d'exécution ?
Merci d'avance !
1 réponse
-
ContributeurBonjour,
Ajoute un filtre auto puis met-toi en enregistrement de macro pour avoir l'essentiel des lignes de code.
Trie par agence (pour qu'elles soient regroupées), sélectionne <> tours, supprime les lignes visibles, ré-affiche tout.
Plus qu'à retoucher le code qu'il soit propre et généraliste.
Ce sera beaucoup plus rapide, la suppression totale se faisant en une fois
eric
-
Bonjour eriic,
Merci pour cette méthode qui me donne un résultat très rapide....
ActiveWorkbook.Worksheets("TEST").ListObjects("Tableau13").Sort.SortFields.Add _
Key:=Range("Tableau13[#All,[Agence]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("TEST").ListObjects("Tableau13").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveSheet.ListObjects("Tableau13").Range.AutoFilter Field:=1, Criteria1:= _
"<>Agence Tours", Operator:=xlAnd
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ListObjects("Tableau13").Range.AutoFilter Field:=1
Range("A24").Select
Comment faire comprendre à Excel, que le critère du filtre ("Agence Tours") se trouve en Feuil1 Cellule E1 ?
Car ce critère est un choix de l'utilisateur issu d'un combobox...
Encore Merci ! -
-
ContributeurRe,
quand tu colles un code utilise l'icone '<>' qu'il reste plus lisible.
Une ligne à modifier :Dim crit As String
'... début du code
'...
crit = "<>" & Sheets("Feuil").[E1].Value
ActiveSheet.ListObjects("Tableau13").Range.AutoFilter Field:=1, Criteria1:=crit, Operator:=xlAnd
Et il y aurait d'autres choses à améliorer.
Tu devrais déposer un fichier de travail avec qq lignes de données (bidons), avec la structure exacte de ton classeur.
eric -
-
-