Bonjour à tous et merci d'avoir pris quelques minutes de votre temps!
Je sais.
Je sais que lire un code qu'on a pas écrit c'est chiant.
Je sais que lorsqu'on a qu'une partie des infos c'est chiant.
La situation est simple: On a demandé au pauvre stagiaire de checker un super programme (qui ne fonctionne plus) fait il y a quelques temps par un Ingé info qui s'était perdu dans mon service.
Pour l'instant j'essaye de comprendre comment il a fait, je commente entièrement le code mais là je bloque
Je me suis renseigné sur les dictionnaires via les tutos developpez (toujours très bien faits d'ailleurs) et autres et donc je commence à piger comment cela fonctionne. Mon problème se situe sur ces deux lignes:
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 Public Sub AddToDictionary(ByRef iSrcDictionary, _ ByVal iReference As String, _ ByVal iCategory As String, _ ByVal iDetails As String, _ Optional ByVal iAmount As Single = 0) Dim lAddFlag As Boolean Dim lTmpDico1, lTmpDico2 Dim lAmount As Single lAddFlag = True lAmount = 0 'Vérifie si la clé (ireference) existe dans le dictionnaire If iSrcDictionary.exists(iReference) Then 'Alors on copie tous les éléments de la clé (ireference) dans un second dictionnaire Set lTmpDico1 = iSrcDictionary.Item(iReference) 'Si icategory existe dans le dictionnaire temporaire alors If lTmpDico1.exists(iCategory) Then 'On copie tous les éléments dans un troisième dictionnaire Set lTmpDico2 = lTmpDico1.Item(iCategory) ' Only keeps distinct values 'Si idetails existe dans le troisième dictionnaire alors If lTmpDico2.exists(iDetails) Then 'On assigne à la variable lAmount la conversion en single lAmount = CSng(lTmpDico2.Item(iDetails)) 'On supprime idetails du troisième dictionnaire lTmpDico2.Remove iDetails End If 'On supprime icategory du second dictionnaire lTmpDico1.Remove iCategory Else 'Si icategory n'existe pas dans le second dictionnaire temporaire 'alors on créer un troisème dictionnaire Set lTmpDico2 = CreateObject("Scripting.Dictionary") End If 'on supprime ireference de iDico iSrcDictionary.Remove iReference Else 'Si iReference n'existe pas dans iDico alors on créer deux dictionnaires Set lTmpDico1 = CreateObject("Scripting.Dictionary") Set lTmpDico2 = CreateObject("Scripting.Dictionary") End If 'Si lAddFlag est vrai alors If lAddFlag Then 'On ajoute au troisième dictionnaire idetails et la somme de lAmount et iAmount lTmpDico2.Add iDetails, lAmount + iAmount 'On ajoute au deuxième dictionnaire iCategory et le troisième dictionnaire(?) 'On ajoute au premier dictionnaire ireference et le second dictionnaire(?) lTmpDico1.Add iCategory, lTmpDico2 iSrcDictionary.Add iReference, lTmpDico1 'On réinitialise les deux dictionnaires Set lTmpDico1 = Nothing Set lTmpDico2 = Nothing End If End Sub
lTmpDico1.Add iCategory, lTmpDico2
iSrcDictionary.Add iReference, lTmpDico1
Il me semble bien avoir lu qu'un dictionnaire ne peut pas en contenir un autre donc je comprends pas trop ce que font ces lignes. Je pense que cela rajoute les éléments des tableaux temporaires qui correspondent aux clés iCategory et iReference à iSrcDictionary mais j'en mettrais pas ma main à couper.
Partager