Bonjour tout le monde,
Alors voilà, je dispose dans mon application d'un scripting.dictionary possédé.
Je m'explique,
Je crée et initialise mon dictionary comme ceci :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Dim iCoef Set iCoef = CreateObject("Scripting.dictionary") For i = 1 To nbCoef iCoef.Add .Cells(3, i), i Next
J'affiche ensuite, afin de vérifier le contenu de mon dictionary le contenu de ce dernier :
Et j'obtiens bien le résultat :
Code VBA : 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 Keys = iCoef.Keys Debug.Print "clé" 'Loop through Keys array For i = 0 To UBound(Keys) Debug.Print "Key", i, Keys(i) Next Dim Items() 'Get dictionary Items Items = iCoef.Items Debug.Print "Item" 'Loop through Items array For i = 0 To UBound(Items) Debug.Print "Item", i, Items(i) Next
Par contre, lorsque je tente d'afficher le résultat directement en passant par un index, je n'ai rien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 clé Key 0 1,5 Key 1 1,25 Key 2 1 Key 3 2 Item Item 0 1 Item 1 2 Item 2 3 Item 3 4
Et j'ai beau essayer toutes les variantes qui me sont venues à l'esprit :
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part Debug.Print "iCoef(2)", iCoef("2")
Je n'obtiens rien du tout.
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Debug.Print "iCoef(2)", iCoef(2) Debug.Print "iCoef(2)", iCoef.Item("2") Debug.Print "iCoef(2)", iCoef.Item(2)
Quelqu'un pourrait-il me dire ce que je ne comprend pas ?
Je souhaite en fait utiliser mon dictionary dans la portion de code suivante :
Code VBA : 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 For cptouvrier = 4 To nbligne For cptcolonne = 6 To nbcolonne ' Nous sommes un samedi ou dimanche If IsEmpty(.Cells(3, cptcolonne).Value) Then ' Nous sommes samedi If Left(.Cells(2, cptcolonne).Value, 4) = "same" Then coefficient = dCoef.Item("samedi") nbreHeures = .Cells(cptouvrier, cptcolonne).Value * coefficient heures(cptouvrier - 4, iCoef.Item(CStr(coefficient))) = nbreHeures ' Nous sommes dimanche ElseIf Left(.Cells(2, cptcolonne).Value, 4) = "dima" Then coefficient = dCoef.Item("dimanche") nbreHeures = .Cells(cptouvrier, cptcolonne).Value * coefficient heures(cptouvrier - 4, iCoef.Item(CStr(coefficient))) = nbreHeures End If ' Nous sommes un jour férié ElseIf .Cells(3, cptcolonne).Value = "férié" Then coefficient = dCoef.Item("férié") nbreHeures = .Cells(cptouvrier, cptcolonne).Value * coefficient heures(cptouvrier - 4, iCoef.Item(CStr(coefficient))) = nbreHeures 'Nous sommes un jour normal Else coefficient = dCoef.Item(.Cells(3, cptcolonne)) nbreHeures = .Cells(cptouvrier, cptcolonne).Value * coefficient heures(cptouvrier - 4, iCoef.Item(CStr(coefficient))) = nbreHeures End If Next ' il faut écrire le résultat dans les cellules de début For i = 1 To nbCoef .Cells(cptouvrier, i).Value = heures(cptouvrier - 4, i) Next Next
Pour plus de faciliter, je vous joint le fichier xls en question.
Petite explications :
La macro en question se trouve dans le Module1 et porte le nom "Calcul_Heure"
Il faudra par la suite, que je lie la macro au fait de pousser sur le bouton Calcul se trouvant dans chaque feuille <Mois> <Année>.
Pour lancer la macro, placer vous dans une feuille de calcul de ce type, (novembre par exemple).
Pour toutes informations complémentaires, n'hésitez pas à me bombarder de question, je tâcherai d'y répondre le plus rapidement possible.
En vous remerciant pour toutes l'aide qu'il vous sera possible de me fournir, je vous souhaite à tous de passer une superbe journée.
Partager