Rendre ma macro plus rapide EXCEL VBA

PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -  
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -
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 !

1 réponse

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      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
    2. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    4. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      Merci ericc, je teste et comme tu me le conseilles, je placerais un fichier dès demain...
      0
    5. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      Cela fonctionne parfaitement, Merci !

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