XL 2016 VBA Curiosité ComboBox

Dudu2

XLDnaute Barbatruc
Bonjour,

Lorsqu'une ComboBox:
- (1) est chargée via la propriété ComboBox.List
et
- (2) parmi les valeurs chargées certaines sont numériques,
la valorisation ultérieure de la ComboBox.Value = x avec une valeur numérique de sa propre liste ne positionne pas le ComboBox.ListIndex sur la valeur en question et est valorisé à -1.

Ce n'est pas le cas si les conditions (1) et (2) ne sont pas réunies où le ComboBox.ListIndex prend alors une valeur correcte correspondant à la position de la valeur dans la liste.

J'ai tout essayé mais la seule option a été de passer par une fonction qui charge les valeurs de ComboBox.List en Tableau et les compare à la valeur à charger pour corriger le ComboBox.ListIndex.
Mais peut-être y a -t-il un moyen plus direct ? (Un petit sujet de réflexion sans caractère essentiel)

Edit: fichier corrigé à 18h33
 

Pièces jointes

  • Classeur1.xlsm
    25.6 KB · Affichages: 24
Dernière édition:

Dudu2

XLDnaute Barbatruc
Pas de souci, le confinement donne le temps d'essayer
1607768977108.gif
 

Dudu2

XLDnaute Barbatruc
Une précision sur l'utilité de charger en Texte: l'autocomplétion à la saisie ne fonctionne pas si ce sont des valeurs numériques. D'où la nécessiter de charger en Texte. A ce propos, j'ai modifié le code du Post #13 car la propriété ComboBox.ListFillRange n'existe pas pour une ComboBox appartenant à un UserForm.
 

patricktoulon

XLDnaute Barbatruc
oui
perso ces deux propriétés je ne les utilises jamais la notion dynamique est nulle forcement
pour une seule colonne il serait intéressant de tester une bricolouphoque à la patrick (une idée qui me vient comme ça en catimini
.list=split(join(application.index([A1:A10].value,0,1),"|"),"|")
LOL ;)
 

patricktoulon

XLDnaute Barbatruc
bingo!!!!
on charge la liste par le .value razé a une dimension ,join et split
c'est loufoque mais ça marche
VB:
Private Sub UserForm_Activate()
    Set plage = [A1:C10]
    With ComboBox1
        'si la plage est multicolonne on récupère la 1 dans la combobox1
        '.List = Split(Join(Application.Transpose(Application.Index(plage.Value, 0, 1)), "|"), "|")
     
        'mais si la plage fait qu'une colonne alors c'est plus simple
        .List = Split(Join(Application.Transpose([A1:A10].Value), "|"), "|")
        .Value = 84
        MsgBox .ListIndex
    End With
End Sub

voila 🤪
complètement barré le toulonnais
a noter que la version application.index fonctionne aussi avec un range d'une seule colonne
 

patricktoulon

XLDnaute Barbatruc
tien regarde comme c'est tordu ce truc
rien que le fait de variabiliser le split du join vba reconverti en numerique
VB:
Private Sub UserForm_Activate()
    tablo = [A1:C10].Value
    With ComboBox1
        .List = itemNumToTextlist(tablo)
        .Value = 84
        MsgBox .ListIndex
    End With
End Sub
Function itemNumToTextlist(tablo)
    itemNumToTextlist = Split(Join(Application.Transpose(Application.Index(tablo, 0, 1)), "|"), "|")
End Function
c'est tordu quand même hein 🤪 :rolleyes:
je précise que j'ai testé avec une 2d variable "tablo2" dans la fonction et nada y a reconversion
VB:
Function itemNumToTextlist(tablo)
    Dim tablo2
    tablo2 = Split(Join(Application.Transpose(Application.Index(tablo, 0, 1)), "|"), "|")
    itemNumToTextlist = tablo2
End Function
 

Discussions similaires

Statistiques des forums

Discussions
314 013
Messages
2 104 552
Membres
109 078
dernier inscrit
Nikitoklass