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