XL 2019 Trier une combobox

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 !

Electronull

XLDnaute Junior
Salut à tous,

Voilà mon problème, j'ai essayé avec ChatGPT, mais j'ai un petit problème.
Dans ma combobox, j'ai 2 col, nom produits et prix, je voudrais qu'à chaque lettre tapée, il trie automatiquement la liste des produits.
Avec ChatGPT ça fonctionne mais je n'ai plus le prix disponible.

Comment feriez-vous pour trier la list.

Merci
 
Bonjour le forum,
comment on fait pour faire référence à un tableau qui se trouve dans un autre classeur excel
Ouvrez les 2 fichiers joints et voyez le code dans la feuille de la ComboBox :
VB:
Const fichier$ = "Base.xlsx" 'mémorise la variable
Dim T As Range 'mémorise la variable

Private Sub ComboBox1_GotFocus()
Dim wb As Workbook
On Error Resume Next
Set wb = Workbooks(fichier)
On Error GoTo 0
If wb Is Nothing Then MsgBox "Ouvrez le fichier '" & fichier & "'...": Exit Sub
With wb.Sheets(1).ListObjects(1) 'tableau structuré dans la 1ère feuille
    Set T = .Parent.Range(.Name)
End With
ComboBox1_Change
End Sub

Private Sub ComboBox1_Change()
Dim crit$, tablo, i&, a(), n&, lig&
crit = "*" & LCase(ComboBox1) & "*"
tablo = T
For i = 1 To UBound(tablo)
    If LCase(tablo(i, 1)) Like crit Then
        ReDim Preserve a(1, n)
        a(0, n) = tablo(i, 1)
        a(1, n) = tablo(i, 2)
        n = n + 1
        If n = 1 Then lig = i
    End If
Next
With ComboBox1
    .MatchEntry = fmMatchEntryNone
    If n = 0 Then .Clear
    If n = 1 Then .List = T.Rows(lig).Value
    If n > 1 Then .List = Application.Transpose(a)
End With
End Sub
A+
 

Pièces jointes

Ah mais je vois encore une chose avec le fichier précédent.

Pour n = 1 la liste de la ComboBox n'affiche pas le format monétaire.

On peut penser qu'il s'agit d'un bug d'Excel puisque ce format s'affiche bien pour n > 1.

Pour y remédier il faut utiliser :
VB:
    If n = 1 Then a = T.Rows(lig).Value: a(1, 2) = Format(a(1, 2), "#,##0.00 €"): .List = a
 

Pièces jointes

Ah mais je vois encore une chose avec le fichier précédent.

Pour n = 1 la liste de la ComboBox n'affiche pas le format monétaire.

On peut penser qu'il s'agit d'un bug d'Excel puisque ce format s'affiche bien pour n > 1.

Pour y remédier il faut utiliser :
VB:
    If n = 1 Then a = T.Rows(lig).Value: a(1, 2) = Format(a(1, 2), "#,##0.00 €"): .List = a
Bonjour,

juste pour info, si le xlsm est ouvert avant le xlsx.
le msgbox demande l'ouverture du xlsx.
donc on ouvre le xlsx en second lieu.
là le code plantera dès qu'on tape une lettre dans la combo.
il faut mettre le curseur hors de la combo (clic dans une cellule) et revenir dans la combo pour que ça passe.

Bon dimanche.
 
Bonjour le forum,
juste pour info, si le xlsm est ouvert avant le xlsx.
le msgbox demande l'ouverture du xlsx.
donc on ouvre le xlsx en second lieu.
là le code plantera dès qu'on tape une lettre dans la combo.
il faut mettre le curseur hors de la combo (clic dans une cellule) et revenir dans la combo pour que ça passe.
Oui merci, je viens d'ajouter ActiveCell.Activate dans le code du post #33.

A+
 
Bonjour
J'ai créé une procédure en VBA qui remplit le combo box av c une donnée que si la chaîne de donnée contient la chaîne écrite.
Si la chaîne écrite est vide alors j'écris toutes les données.
J'appelle cette procédure à chaque changement du contenu de la textbox.
Le contenu de la textbox est passée en paramètre de la procédure
 
- 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
5
Affichages
320
Retour