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:

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
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...
Je m'y prends surement très mal pour gérer cette erreur et je veux bien quelques conseils.

Merci d'avance