Bonjour,
J'ai fait un petit programme qui met des valeurs par défaut dans des cellules à partir d'autres. Les dépendances de cellules sont définies dans un fichier de config.
J'essaye de gérer les erreurs notamment en essayant de détecter les boucles infinies (ex. cellule A prend sa valeur par défaut dans la cellule B qui elle même prend sa valeur par défaut dans la cellule A).
Le code est donne à peu près ça:
Le problème c'est que le message d'erreur n'est jamais affiché. En débuggant, j'ai même l'impression qu'il ne rentre jamais dans les if des gestions d'erreur...
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 Private Const INFINITE_LOOP_ERROR = 15662 Private ChampsEnCoursDeMiseAJour As Scripting.Dictionary Public Sub MettreValeursParDefaut() Dim vChamps As Variant, i&, sNomDuChamps$ Set ChampsEnCoursDeMiseAJour = New Scripting.Dictionary On Error GoTo DEFAULT_VALUES_ERROR vChamps = RecupererChampsRequis() For i = LBound(vChamps) To UBound(vChamps) sNomDuChamps = CStr(vChamps(i)) MettreValeurParDefautSpecifique sNomDuChamps Next i Exit Sub DEFAULT_VALUES_ERROR: If Err.Number = INFINITE_LOOP_ERROR Then MsgBox "Une boucle infinie a été détectée. Vérifier le fichier de configuration!", vbCritical End If End Sub Private Sub MettreValeurParDefautSpecifique(ByVal NomDuChamps As String) If ChampsEnCoursDeMiseAJour.exists(NomDuChamps) Then Err.Raise INFINITE_LOOP_ERROR End If On Error GoTo DEFAULT_VALUE_ERROR If IsEmpty(Range(NomDuChamps)) Then ChampsEnCoursDeMiseAJour.Add NomDuChamps, NomDuChamps Range(NomDuChamps).value = RecupererValeurParDefaut(NomDuChamps) ChampsEnCoursDeMiseAJour.Remove NomDuChamps End If Exit Sub DEFAULT_VALUE_ERROR: If Err.Number = INFINITE_LOOP_ERROR Then Err.Raise INFINITE_LOOP_ERROR End If End Sub Private Function RecupererValeurParDefaut(ByVal NomDuChamps As String) as string Dim sDependance$, i& sDependance = RecupererDependance(NomDuChamps) On Error GoTo DEFAULT_VALUE_ERROR MettreValeurParDefautSpecifique sDependance 'sorte de récursivité RecupererValeurParDefaut = Range(sDependance).value Exit Function DEFAULT_VALUE_ERROR: RecupererValeurParDefaut = "" If Err.Number = INFINITE_LOOP_ERROR Then Err.Raise INFINITE_LOOP_ERROR End If End Function
Je m'y prends surement très mal pour gérer cette erreur et je veux bien quelques conseils.
Merci d'avance
Partager