J'ai un ComboBox ("ComboDilutions") qui affiche, dans sa liste déroulante, un certain nombre d'items.
Je choisis un item, supposons le 3ème de la liste.
Si un certain événement intervient, alors, automatiquement, je reviens au 1er item de la liste.
- Facile :
VB:
Sheets("BTX").ComboDilutions.ListIndex = 0 'sélection par défaut du 1er item ("NO DILUTIONS") de la liste de la ComboBox "ComboDilutions"
Tant que l'événement en question n'est pas achevé, le ComboBox est bloqué.
- Facile :
VB:
Private Sub ComboDilutions_Change()
If exclu <> 0 Then Exit Sub '"exclu" signalant (s'il est <> 0) que l'événement a lieu
'blablabla
End Sub
Il y aurait-il un moyen, quand le ComboBox est bloqué, de faire en sorte que lorsque l'on veut choisir malencontreusement (puisque le ComboBox est bloqué...) un autre item de la liste (supposons le 4ème), automatiquement, en quittant le ComboBox, le 1er item soit sélectionné et non pas celui sur lequel on avait cliqué inutilement ?
On pourra, à juste titre, me rétorquer qu'il suffit, lorsque l'événement a cessé et que le ComboBox est débloqué, de mettre :
VB:
Sheets("BTX").ComboDilutions.ListIndex = 0 'sélection par défaut du 1er item ("NO DILUTIONS") de la liste de la ComboBox "ComboDilutions"
Mais là apparaît un problème, pas grave, mais disgracieux :
Nous avions sélectionné le 4ème item de la liste. Le ComboBox déverrouillé, cet item va se déclencher et instantanément après le 1er, d'où méchant scintillement.
Il paraît plus logique de piloter la ComboBox depuis la macro qui gère le "l'événement en question" et donc la variable (mémorisée) exclu.
Par exemple avec un code de ce genre :
Code:
Static exclu As Boolean 'mémorise la variable
'ici le code définissant (entre autre) la variable exclu
With Sheets("BTX")
If exclu Then
.ComboDilutions.ListIndex = 0
.ComboDilutions.Enabled = False
Else
.ComboDilutions.Enabled = True
End If
End With
Tu as tout à fait raison : pourquoi faire compliqué quand on peut faire simple ?!
Il est vrai que j'ai parfois (...) ce défaut.
La sentence . ".ComboDilutions.Enabled = False" résoud parfaitement le problème.