Bonjour,
Je suis sur un projet depuis hier, mais je galère pour faire defiler des données via un bouton spin dans un userform
Je bloque car j'ai tjs des problème, je dois pas bien m'y prendre et la je sature, donc si quelqu'un pouvait me donner un coup de main
J'ai des données dans un tableau un produit financier par ligne et une caracteristique par colonne. j'ai decidé de faire deux dictionnaires dans la Sub MyProductData() un premier qui donne a un nom la position sur la feuille . Si des gens ont des idées d'algo, peut etre que quelque chose m'echape :/ merci
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 Option Compare Text '--------------------Présentation des Produits----------------------------------------------- 'Modification du Nom du produit Private Sub Product_ProductName_Change() Dim Object As Object, MyKey With Me.MultiPageMana.Pages(1) For Each Object In .Controls MyKey = Split(Object.Name, "_") If TypeName(Object) = "ComboBox" Then If Not MyKey(1) = "ProductName" Then If MyDicoDB(.Product_ProductName.Text).Exists(MyKey(1)) Then Object.Text = MyDicoDB(Me.MultiPageMana.Pages(1).Product_ProductName.Text)(MyKey(1)).Value End If End If End If Next Object End With End Sub Private Sub UserForm_Initialize() 'Creer un dictionnaire de datas Call MyProductData Call InitializeList 'Initialise la toupie Call InitializeToupie End Sub Sub InitializeToupie() With Me.MultiPageMana.Pages(1) .SpinButtonName.Value = 1 .SpinButtonName.Min = 0 .SpinButtonName.Max = 27 'MyDicoDB.Count End With End Sub Private Sub SpinButtonName_Change() Dim I As Long With Me.MultiPageMana.Pages(1).SpinButtonName 'I = .Value Select Case .Value Case Is < 1 .Value = .Max Case 1 To .Max Me.MultiPageMana.Pages(1).Product_ProductName.Text = MyDicoDB.Keys(.Value) Case Is > .Max .Value = 1 End Select End With End Sub Sub InitializeList() Dim Object As Object, MyKey Dim MyProduct With Me.MultiPageMana.Pages(1) For Each Object In .Controls MyKey = Split(Object.Name, "_") If TypeName(Object) = "ComboBox" Then For Each MyProduct In MyDicoDB.Keys If MyDicoDB(MyProduct).Exists(MyKey(1)) Then Object.AddItem MyDicoDB(MyProduct)(MyKey(1)).Value Object.ListIndex = 0 End If Next MyProduct End If Next Object End With End Sub
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 'Determiner le dictionnaire des Produits Sub MyProductData() Dim AllRange As Range, MyRange As Range Dim MyKey, NBC As Long, NBL As Long Dim MyData As New Dictionary Dim MyDataPos As New DataPos With ThisWorkbook.Worksheets("Produits") Set RangeCatProd = .Range(.Range("StartP").Offset(, 1), .Range("StartP").End(xlToRight)) 'RangeCatProd.Select For Each MyRange In RangeCatProd.Cells MyKey = Split(MyRange.Value, " ") If UBound(MyKey) > 0 Then MyKey(0) = MyKey(0) & MyKey(1) If Not MyCol.Exists(MyKey(0)) Then MyCol.Add MyKey(0), MyRange.Column End If Next MyRange Set RangeProduct = .Range(.Range("StartP").Offset(1), .Range("StartP").End(xlToRight).End(xlDown)) For Each MyRange In RangeProduct.Columns(1).Cells If Not MyDicoDB.Exists(MyRange.Value) Then Set MyData = New Dictionary For Each MyKey In MyCol.Keys If Not MyData.Exists(MyKey) Then Set MyDataPos = New DataPos MyDataPos.Col = MyCol(MyKey) MyDataPos.Line = MyRange.Row MyDataPos.Value = RangeProduct(MyRange.Row, MyCol(MyKey)).Value MyData.Add MyKey, MyDataPos End If Next MyKey MyDicoDB.Add MyRange.Value, MyData End If Next MyRange End With End Sub
Partager