Rendre ma macro plus rapide EXCEL VBA

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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

    1. 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 !
    2. 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...
    3. Contributeur
      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
    4. Merci ericc, je teste et comme tu me le conseilles, je placerais un fichier dès demain...
    5. Cela fonctionne parfaitement, Merci !

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