Magic_Doctor
XLDnaute Barbatruc
Bonsoir,
Sur une feuille, j'ai :
- un certain nombre de ComboBox dont les noms ont tous le même préfixe ("ComboListe") : "ComboListe1", "ComboListe2", "ComboListe3"...
Ce nombre peut éventuellement varier si l'on désire en rajouter un ;
- un ComboBox, qui se charge lors de l'ouverture du classeur, et qui affiche uniquement le suffixe de chaque ComboBox préfixé "ComboListe" : 1, 2, 3...
Au départ, j'avais écrit ceci :
Ça marche bien. Le ComboBox est bien chargé et le bon item sélectionné à l'ouverture du classeur.
Pour ne pas à avoir à modifier l'Array, au cas où l'on rajouterait un, voire plusieurs "ComboListe", j'ai procédé ainsi :
Faire un décompte, à l'ouverture du classeur, de tous les ComboBox préfixés "ComboListe", au moyen de cette fonction :
J'ai donc écrit ceci dans Workbook_Open() :
Ça marche presque bien, à ceci près que le ComboBox qui contient la liste des suffixes affiche une liste "fantôme" qui a néanmoins l'air de s'être bien chargée : quand on la déploie, aucun item apparaît, et pourtant quand on clique sur une ligne "vide" de la liste, tout marche correctement.
Comment faire en sorte que les items apparaissent concrètement ?
Bien sûr, on peut me rétorquer qu'il est plus simple de rajouter un nombre dans l'Array et voili voilou. Mais c'est pour le fun que j'ai décidé de procéder ainsi.
Sur une feuille, j'ai :
- un certain nombre de ComboBox dont les noms ont tous le même préfixe ("ComboListe") : "ComboListe1", "ComboListe2", "ComboListe3"...
Ce nombre peut éventuellement varier si l'on désire en rajouter un ;
- un ComboBox, qui se charge lors de l'ouverture du classeur, et qui affiche uniquement le suffixe de chaque ComboBox préfixé "ComboListe" : 1, 2, 3...
Au départ, j'avais écrit ceci :
VB:
Sub Workbook_Open()
Dim liste
'on charge le ComboBox "ComboBox_NbSolvants"
liste = Array("1", "2", "3", "4", "5", "6", "7")
With Worksheets("Données").ComboBox_NbSolvants
.List = liste
.ListIndex = [Remember] 'cellule nommée "Remember" qui conserve le dernier ListIndex du ComboBox "ComboBox_NbSolvants" avant la dernière fermeture du classeur
End With
End Sub
Pour ne pas à avoir à modifier l'Array, au cas où l'on rajouterait un, voire plusieurs "ComboListe", j'ai procédé ainsi :
Faire un décompte, à l'ouverture du classeur, de tous les ComboBox préfixés "ComboListe", au moyen de cette fonction :
VB:
Function NbActiveX(TypeObjet$, préfixe$, hoja As Byte) As Byte
'Renvoie le nombre d'ActiveX de même type et ayant tous le même préfixe d'une feuille donnée du classeur.
'Ex : "MonCombo1","MonCombo2","MonCombo3"...
'- TypeObjet : un ActiveX ("ComboBox", "CheckBox", "CommandButton"...)
'- préfixe : le préfixe commun des objets en question
'- hoja : le numéro de la feuille du classeur
'Magic_Doctor
Dim f As Worksheet, largo As Byte, c, i As Byte
Set f = Sheets(hoja)
largo = Len(préfixe)
For Each c In f.OLEObjects
If TypeName(c.Object) = TypeObjet And Left(c.Name, largo) = préfixe Then i = i + 1
Next
NbActiveX = i
End Function
VB:
Sub Workbook_Open()
Dim NbComboListe As Byte, liste(), i As Byte
'décompte du nombre de ComboBox dans le feuille 1 ("Données") dont le préfixe est "ComboListe"
NbComboListe = NbActiveX("ComboBox", "ComboListe", 1)
'on charge le ComboBox "ComboBox_NbSolvants"
ReDim liste(1 To NbComboListe)
For i = 1 To NbComboListe
liste(i) = i
Next
With Worksheets("Données").ComboBox_NbSolvants
.List = liste
.ListIndex = [Remember]
End With
End Sub
Comment faire en sorte que les items apparaissent concrètement ?
Bien sûr, on peut me rétorquer qu'il est plus simple de rajouter un nombre dans l'Array et voili voilou. Mais c'est pour le fun que j'ai décidé de procéder ainsi.