Rendre ma macro plus rapide EXCEL VBA

Fermé
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 - Modifié le 25 juin 2019 à 13:25
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 - 27 juin 2019 à 10:15
Bonjour,

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 !
A voir également:

1 réponse

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié le 25 juin 2019 à 13:05
Bonjour,

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


0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21
Modifié le 25 juin 2019 à 13:26
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 !
0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21
25 juin 2019 à 16:28
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...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié le 25 juin 2019 à 19:58
Re,

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
0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21
Modifié le 25 juin 2019 à 23:39
Merci ericc, je teste et comme tu me le conseilles, je placerais un fichier dès demain...
0
PYGOS69 Messages postés 452 Date d'inscription jeudi 23 août 2012 Statut Membre Dernière intervention 10 octobre 2023 21
26 juin 2019 à 09:54
Cela fonctionne parfaitement, Merci !

Je prépare un fichier dans la journée, pour l'évolution de la macro ....
0