Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA Curiosité ComboBox

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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.
 
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 😉
 
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
 
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 🤪 🙄
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
2 K
Compte Supprimé 979
C
Réponses
6
Affichages
2 K
F
Réponses
2
Affichages
767
Flavie
F
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…