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.
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 '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
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 :
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
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.RoyaumeDesCanidés : 1,37109375
RoyaumeDesFelins : 221,30859375
RoyaumeDesOiseaux : 0,01171875
RoyaumeDesPoissons : 0,72265625
RoyaumeDesHommes : 0,40234375
RoyaumeDesReptiles : 0,6875
Total : 224,53515625
Merci d'avance pour vos réponses !
Partager