Gros problème, programme à debugger
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:
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:
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 |