Bonjour,

Je travail actuellement sur une feuille excel avec 24 colonnes et 1000 lignes qui fait office de base de données.

Dans cette base, je dois supprimer certaines entrées via une macro, pour le fonctionnement de mes macro suivantes.

(Pour des raisons de confidentialités, j'ai remplacé divers éléments par des noms de félin)


Voici un exemple de code de suppression d'entrées. Il y en a trois qui fonctionnent toutes sur le même principe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'Efface les lignes dont le métier = Tigre
Sub SupressionDesTigres()
    Dim lynx As Integer
 
    With ThisWorkbook.Worksheets("Chat")
        For lynx = 2 To LNK.nombreDeLignes("G") 'LNK.nombreDeLignes(colonne As String) donne le nombre de lignes de la colonne choisie
            If .Range("G" & lynx) = "Tigre" Then
                Rows(i & ":" & lynx).ClearContents
            End If
        Next
    End With
 
    Call LNK.SuppressionLignesVides 'Supprime toutes les lignes entièrement vides de la feuille active
End Sub
J'ai aussi une procédure pour supprimer les colonnes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
'Efface les colonnes qui ne sont pas utile pour le programme
Sub TriParColonnes()
    Dim colonne As Integer
    Dim nbLignes As Integer
    Dim nomColonne As String
 
    Set colonnesASupprimer = CreateObject("System.Collections.ArrayList")
 
    'Les colonnes a choisir peuvent changer selon les années. Elles sont donc toutes notés ici, mais commentées si inutiles pour l'année en cours
 
    'colonnesASupprimer.Add("Lion")
    'colonnesASupprimer.Add("Guépard")
    colonnesASupprimer.Add("Jaguar")
    colonnesASupprimer.Add("Puma")
    'colonnesASupprimer.Add("Couguar")
    'colonnesASupprimer.Add("Panthère")
    '.... .... ....
    colonnesASupprimer.Add ("Léopard")
    colonnesASupprimer.Add ("Jaguarondi")
    colonnesASupprimer.Add ("Margay")
    colonnesASupprimer.Add ("Ocelot")
    'colonnesASupprimer.Add("Caracal")
    'colonnesASupprimer.Add("Serval")
 
    nbLignes = LNK.nombreDeLignes("A") 'LNK.nombreDeLignes(colonne As String) donne le nombre de lignes de la colonne choisie
 
    With ThisWorkbook.Worksheets("Chat")
        For colonne = 24 To 1 Step -1
            If colonnesASupprimer.Contains(Cells(1, colonne).Value) Then
                Range(.Cells(1, colonne), .Cells(nbLignes, colonne)).Delete Shift:=xlToLeft
            End If
        Next
    End With
 
    Columns("A:X").EntireColumn.autofit
End Sub
Tout fonctionne comme il faut mais j'ai des gros problèmes de lenteur. Voilà le temps d’exécution (en secondes) par modules de mon programme :
RoyaumeDesCanidés : 1,37109375
RoyaumeDesFelins : 221,30859375
RoyaumeDesOiseaux : 0,01171875
RoyaumeDesPoissons : 0,72265625
RoyaumeDesHommes : 0,40234375
RoyaumeDesReptiles : 0,6875

Total : 224,53515625
Ce temps d’exécution n'étant pas acceptable pour mon entreprise, je cherche un moyen d'optimiser mon code depuis quelque temps, mais je n'ai pas trouvé pour l'instant. Je me tourne donc vers vous pour savoir si vous connaissez un moyen d'améliorer la vitesse d’exécution de la macro, et si oui, lequel.

Merci d'avance pour vos réponses !