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