Bonjour
Après de nombreuses années d'utilisation d'excel et du vba je viens de m'apercevoir d'un problème de performance.
Voici mon problème : la macro suivante parcours une "bdd", met tout en mémoire dans un tableau, et ensuite affiche dans un tableau les éléments en fonction d'un critère demandé par l'utilisateur.
J'ai donc remarqué qu'en exécutant ce code directement depuis l'éditeur (F5), l'exécution dure environ 3s; en mettant un bouton sur la feuille qui appelle cette macro, l'exécution passe à 30s, autant que c'est inenvisageable au quotidien
Y a t il des explications d'une telle différence ?
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
37
38
39
40
41
42
43
44 Sub affiche_planning() 'on stocke le contenu de l'onglet db dans un tableau, c'est plus rapide !!! Dim aff_planning As Variant nb = Sheets("db").Range("A65000").End(xlUp).Row 'Debug.Print nb ReDim aff_planning(nb - 2, 1) For i = 2 To nb aff_planning(i - 2, 0) = Sheets("db").Cells(i, 1).Value aff_planning(i - 2, 1) = Sheets("db").Cells(i, 5).Value Next i ' on affiche le planning Dim qte As Variant sh = "General_2" Range("F5:AJ54").Select Selection.ClearContents Range("F5").Select For col = 6 To 36 For lig = 5 To 54 'creation de la clef de recherce clef = (col - 5) & Sheets(sh).Cells(lig, 1).Value & Sheets(sh).Cells(1, 22).Value qte = Application.VLookup(clef, aff_planning, 2, False) If IsError(qte) Then qte = "" End If Sheets(sh).Cells(lig, col).Value = qte Next lig Next col End Sub
Partager