Bonjour à tous,
Pour l'un de mes projets Excel, j'ai un souci que je n'arrive pas à résoudre (et pour lequel ce forum ne me donne pas la solution, c'est bien la première fois!). Dans un de mes userform j'ai le code en dessous (mon problème s'applique lorsque preUSF = 9) :
Les commentaires indiquent mon problème : l'une de mes listbox ne change pas toujours de valeur. Je précise que j'ai un sub List_TypeMac_Change qui modifie la valeur des items de List_Mac :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Userform_Initialize() Call InitProd 'fonction d'initialisation ; ne devrai pas être la cause de mon problème List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT") If preUSF = 9 Then MultiPage1.Value = 1 List_TypeMac.Value = TypeMac 'ici la valeur de List_TypeMac se change bien à chaque fois List_Mac.Value = NomEN 'ici la valeur reste parfois à "" alors que NomEN lui n'est pas égal à "" Else MultiPage1.Value = 0 End If End Sub
J'ai également un sub List_Mac_Change qui s'applique, l'objectif est de donner des valeurs par défaut aux inputbox de mon userform :
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 Private Sub List_TypeMac_Change() List_Mac.Clear Entry_Nom_FR.Value = "" Entry_Nom_EN.Value = "" Entry_Nom_DE.Value = "" Entry_Nom_ES.Value = "" Entry_Nom_IT.Value = "" Select Case List_TypeMac.ListIndex Case 0, 1, 2, 3 For Y = 1 To UBound(TabMac, 2) 'TabMac est un tableau de 2 dimensions qui comprend les valeurs que doivent prendre les items de List_Mac If TabMac(List_TypeMac.ListIndex + 1, Y) <> "" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 1, Y) Next Y Case 4 For Y = 1 To UBound(TabMac, 2) If TabMac(List_TypeMac.ListIndex + 3, Y) <> "" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 3, Y) Next Y Case 5, 6 For Y = 1 To UBound(TabMac, 2) If TabMac(List_TypeMac.ListIndex + 4, Y) <> "" And TabMac(List_TypeMac.ListIndex + 4, Y) <> "SKIVING TOOLS" And TabMac(List_TypeMac.ListIndex + 4, Y) <> "OTHER : OPTIONS AND SPARE PARTS" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 4, Y) Next Y End Select End Sub
D'où mon problème : si List_Mac ne change pas de valeur comme attendu, mon userform ne se comporte pas du tout comme je le veux! Si vous pouviez m'aider, soit à résoudre le problème soit à le contourner (une préférence tout de même pour la résolution car je ne comprends pas du tout d'où ça peut venir :p) ça serait super chouette! Merci d'avance!
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 Private Sub List_Mac_Change() If List_Mac.Value <> "" Then 'j'ai précisé cette condition pour éviter de faire buguer ma macro en attendant de résoudre mon problème NomMac = List_Mac.Value i = Application.Match(NomMac, PriceList.Columns(4), 0) Entry_Nom_FR.Value = PriceList.Range("C" & i).Value 'tous ces "entry" sont des inputbox ; PriceList et ProductGuide sont des sheets de mon classeur Entry_Nom_EN.Value = PriceList.Range("D" & i).Value Entry_Nom_DE.Value = PriceList.Range("E" & i).Value Entry_Nom_ES.Value = PriceList.Range("F" & i).Value Entry_Nom_IT.Value = PriceList.Range("G" & i).Value If PriceList.Range("O" & i).Value <> "" Then Entry_IMG.Value = ThisWorkbook.Path & "\IMAGES\" & PriceList.Range("O" & i).Value i = Application.Match(NomMac, ProductGuide.Columns(1), 0) Entry_Position.Value = ProductGuide.Range("B" & i).Value Entry_Benefits.Value = ProductGuide.Range("C" & i).Value Entry_Notes.Value = ProductGuide.Range("E" & i).Value If ProductGuide.Range("F" & i) Like "*English*" Then CheckBoxEN = True Else CheckBoxEN = False If ProductGuide.Range("F" & i) Like "*French*" Then CheckBoxFR = True Else CheckBoxFR = False If ProductGuide.Range("F" & i) Like "*German*" Then CheckBoxDE = True Else CheckBoxDE = False If ProductGuide.Range("F" & i) Like "*Spanish*" Then CheckBoxES = True Else CheckBoxES = False If ProductGuide.Range("F" & i) Like "*Italian*" Then CheckBoxIT = True Else CheckBoxIT = False If ProductGuide.Range("H" & i).Value <> "" Then Entry_DeliveryTime.Value = Left(ProductGuide.Range("H" & i).Value, Len(ProductGuide.Range("H" & i).Value) - 25) Entry_Codes.Value = ProductGuide.Range("I" & i).Value Entry_Packing.Value = ProductGuide.Range("J" & i).Value End If End Sub
Edit : je précise que ce problème ne survient même pas systématiquement, et pourtant avec exactement les mêmes actions.
Edit2 (je vous donne des infos au fur à mesure que j'en ai) : Quand le problème survient, pas moyen de modifier la valeur de ce listbox, même en insistant :
Ici même en modifiant la valeur via ListIndex, List_Mac.Value reste toujours égal à ""
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 Private Sub Userform_Initialize() Call InitProd List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT") If preUSF = 9 Then MultiPage1.Value = 1 List_TypeMac.Value = TypeMac List_Mac.Value = NomEN If List_Mac.Value <> NomEN Then List_Mac.ListIndex = 0 List_Mac.Value = NomEN End If Else MultiPage1.Value = 0 End If End Sub
Deuxième essai :
Et la ça tourne en boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub Userform_Initialize() Call InitProd List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT") If preUSF = 9 Then MultiPage1.Value = 1 List_TypeMac.Value = TypeMac List_Mac.Value = NomEN While List_Mac.Value <> NomEN List_Mac.Value = NomEN Wend Else MultiPage1.Value = 0 End If End Sub
Edit3 : J'ai une info intéressante! Le problème survient quand List_Mac.Value vaut "" avant modification de List_Mac.Value. S'il vaut Null alors ma macro marche. Mais pas moyen d'affecter Null à la valeur de List_Mac...
Partager