Re-bonjour le forum,
Afin de n'alimenter ma ComboBox que par des valeurs non nulles et sans doublons, j'ai décidé de créer une seconde ComboBox qui me sert de stockage temporaire afin de ne pas provoquer l'événement "T_Cons_CBP4_Change()".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Private Sub T_Cons_CBP4_Init()
Dim i As Integer
Set WbO = WbT.Sheets(1)
Set t = WbO.ListObjects("t_bg")
For i = 2 To t.DataBodyRange.Columns(12).Rows.Count
T_Cons_CBTest = t.DataBodyRange(i, 12)
If T_Cons_CBTest.ListIndex = -1 And t.DataBodyRange(i, 12).Value <> "" Then
T_Cons_CBTest.AddItem t.DataBodyRange(i, 12).Value
End If
Next i
T_Cons_CBP4.List = T_Cons_CBTest.List
End Sub |
En effet, avant d'arriver à cette solution-ci, je suis passé par une ligne qui m'appelait "i" fois l'événement T_Cons_CBP4_Change() pour une simple raison, c'est que cette ligne :
T_Cons_CBTest = t.DataBodyRange(i, 12)
était écrite comme cela...
T_Cons_CBP4 = t.DataBodyRange(i, 12)
Et donc à chaque boucle cela provoquait l'événement Change. J'avais essayé avec le Application.EnableEvents mais j'ai cru comprendre que ce dernier était lié à l'application en tant que telle et non pas au UserForm, et vu que le changement appliqué se situait sur le UserForm je me retrouvais dans la panade. J'ai donc trouvé cette solution pour éviter ce problème.
Pourquoi ce post alors ?
Je souhaiterai savoir s'il y a une manière plus subtile d'empêcher temporairement un événément_Change de s'effectuer.
Passer par la ComboBox "virtuelle" ne me dérange pas, mais ça crée un objet inutile (même si .Visible = False , il existe tout de même)
Merci à tous et bon après-midi 
PS : N'hésitez pas à commenter pour m'aider à optimiser les lignes si cela est possible. J'ai déjà déclaré en Public certaines variables, que je n'aurai plus qu'à "Set" lors de l'initialisation de mes procédures.
1 2 3 4 5
| Option Explicit
Public WbT As ThisWorkbook
Public WbO As Worksheet
Public mondico As Object
Public t As ListObject |
Partager