Bonjour. J'ai un petit problème de pile pleine avec excel 2003.

Ce que je veut faire:
-Dans une case("Nb_devise") j'ai un entier qui correspond au nombre de lignes de mon tableau.
-Ensuite, dès que cette case est modifiée (elle peut l'être de plusieures manières), je trace des bordures sur le tableau, efface les cases dessous, et met des valeurs par défaut dans les champs vides.

Mon problème: temps d'éxécution super long, voire plantage pour cause de pile pleine... je croit que c'est plot_borders qui fait planter mais je ne suis pas sur, et je ne sait pas pourquoi.

Voici mon code:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Private Sub Worksheet_Change(ByVal Nb_Devise As Range)
 
     Dim tmp As Integer
     tmp = Range("Nb_Devise").Value
 
     'On trace les bordures autour du tableau des devises
     plot_borders (tmp)
 
     'On met des valeurs par défaut dans les cellules vides
     Dev_complete (tmp)
 
     'On efface les lignes inutilisées
     Dev_clean (tmp)
 
End Sub
 
Private Sub Dev_complete(tmp As Integer)
 
     'Si les cellules sont vides, alors on leur assigne les valeurs par défaut.
     For i = 0 To tmp - 1
         If IsEmpty(Range("Debut_Tab_Dev").Offset(i, 0)) And    IsEmpty(Range("Debut_Tab_Dev").Offset(i, 1)) Then
             Range("Debut_Tab_Dev").Offset(tmp - 1, 0).Value = "#Name"
             Range("Debut_Tab_Dev").Offset(tmp - 1, 1).Value = "#Value in USD"
         End If
     Next i
 
End Sub
 
Private Sub Dev_clean(tmp As Integer)
 
     Range(Range("Debut_Tab_Dev").Offset(tmp, 0), Range("Debut_Tab_Dev").Offset(tmp + 3, 1)).Value = ""
 
End Sub
 
Private Sub plot_borders(tmp As Integer)
 
     'On enleve les bordures en dessous du tableau
     Range(Range("Debut_Tab_dev").Offset(tmp, 0), Range("Debut_Tab_dev").Offset(tmp + 3, 1)).Borders.LineStyle = xlLineStyleNone
 
     'On place les bordures a gauche:
     With Range("Debut_Tab_Dev", Range("Debut_Tab_dev").Offset(tmp - 1, 0)).Borders
         .LineStyle = xlContinuous
         .Weight = xlThin
     End With
 
     With Range("Debut_Tab_Dev", Range("Debut_Tab_dev").Offset(tmp - 1, 0)).Borders(xlEdgeRight)
         .LineStyle = xlLineStyleNone
     End With
 
     'On place les bordures a droite
     With Range(Range("Debut_Tab_dev").Offset(0, 1), Range("Debut_Tab_dev").Offset(tmp - 1, 1)).Borders
         .Weight = xlThin
         .LineStyle = xlContinuous
     End With
 
     With Range(Range("Debut_Tab_dev").Offset(0, 1), Range("Debut_Tab_dev").Offset(tmp - 1, 1)).Borders(xlEdgeLeft)
         .LineStyle = xlLineStyleNone
     End With
 
End Sub