Monsieur Excel
Pour tout savoir faire sur Excel !

17 juin 2016

Une macro plus rapide ?

L’article précédent a décidément stimulé les lecteurs de ce blog !

Daniel Colardelle a dit : « Il serait intéressant de connaître le temps d'exécution pour ajouter une colonne de cellules séquentielles permettant de retrouver l'ordre initial, de trier, de supprimer les lignes et enfin de retrier pour retrouver l'ordre initial afin de mieux comparer. »

Claude Duigou a dit :  « D. Colardelle a tout à fait raison : pour que la mesure de performance soit valable, il faut que les données retrouvent leur ordre initial. Dans certaines applications, ceci peut être impératif. »

Pierre Dumas a dit : « Je plussoie aux deux commentaires précédents. Ceci étant, 39 secondes pour l'exécution de cette macro, cela me semble bien trop long. J'ai donc fait le test sur mon ordinateur portable, qui n'est pas un foudre de guerre (Celeron à 1,8GHz). Les tests montrent un temps d'environ 4 secondes. Par la méthode de trier auparavant, c'est un peu plus rapide : 2 à 3 secondes. Mais c'est toujours bon à prendre et l'astuce est à conserver. »

Que puis-je en dire ? Contrairement à Pierre Dumas, j’observe un écart énorme entre le temps pris par la macro quand je trie avant et après la destruction des mauvaises lignes, et celui pris sans ces deux tris. Pour vérifier cela et répondre aussi aux deux premiers "commentateurs", j’ai donc modifié mon modèle précédent, en ajoutant une cellule nommée Tri dans laquelle je saisis « Oui » si je fais les tris avant et après le traitement, et « Non » autrement. Je compte bien entendu le temps pris par ces deux tris quand je les effectue. La seule chose dont je ne compte pas le temps, au début de la macro, est la récupération des trois colonnes de départ depuis l’onglet « Base ».

Mon expérience est que le temps moyen de la macro, quand je ne fais pas les tris, est de l’ordre de 24 minutes 25 secondes, les résultats sur 5 essais variant entre 24:18 et 24:34. Quand j’effectue les deux tris, il est en moyenne de 1 seconde, tris compris. Autrement dit, je vais 1.470 fois plus vite quand j’effectue les tris ! Je suis donc très très loin du tout petit écart observé par Pierre Dumas. Je moinssoie !

Si vous voulez faire des tests sur votre PC, envoyez-moi un mail à thiriez@hec.fr et je vous renverrai mon fichier Excel. Vous pourrez alors nous donner vos conclusions en commentaire à cet article.

Voici le code de la macro :

Sub Vitesse()
    Columns("A:C") = Sheets("Base").Columns("A:C").Value
    Call Chrono
    If Range("Tri") = "Oui" Then
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Add Key:=Range("A2:A100001" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Test").Sort
            .SetRange Range("A1:C100001")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End If
    Range("A1").AutoFilter
    ActiveSheet.Range("$A$1:$C$100001").AutoFilter Field:=1, Criteria1:="Rouge"
    Rows("2:100001").Delete Shift:=xlUp
    Range("A1").AutoFilter
    If Range("Tri") = "Oui" Then
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Test").Sort.SortFields.Add Key:=Range("C2:C100001" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Test").Sort
            .SetRange Range("A1:C100001")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End If
    Call Chrono

End Sub

2 Commentaire(s):

  • Bonjour Hervé,

    L'objet de mon commentaire n'était pas de contester tes mesures, mais plutôt de dire qu'il fallait les compléter afin de "dé-trier" les données. Quant aux variations des mesures, elles peuvent peut-être s'expliquer par les données du classeur.

    Cordialement.

    Daniel

    By Blogger Daniel Colardelle, sur 8:39 AM  

  • C'est bien pour cela que je vous propose de m'envoyer un mail afin que je puisse vous envoyer mon fichier. Vous pourrez alors tester ce fichier sur votre PC et me dire combien de temps la macro vous prend avec ou sans les tris.

    By Blogger Hervé Thiriez, sur 11:12 PM  

Enregistrer un commentaire

<< Accueil