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





Répondre avec citation


(et encore j'ai essayé de simplifier au maximum pour rester compréhensible).
Partager