Erreur d'exécution '13' dans un ComboBox
Bonjour, je reviens vers vous car j'ai un petit problème avec une Combobox, quand je commence par taper dans la Cbx_produit de la UserForm Frm_Recherche une première lettre qui n'est pas dans le tableau, alors le programme m'affiche un message d'erreur, et c'est pareil quand je supprime la dernière lettre , il m'affiche le même message d'erreur. Quelqu'un aurait une solution à ce problème svp? merci. J'envoie le fichier Excel en pièce joint.
Cordialement.
Bonjour Minakashi
Essaie peut-être cela :
Private Sub Cbx_produit_Change()
Dim ctrl As Control
Dim tb()
Dim I As Integer: I = 2
'// récupération du tableau des infos article à partir de la valeur de la clé du dictionnaire
If Me.Cbx_produit.Value <> "" And dic_articles.Exists(Me.Cbx_produit.Value) = False Then
MsgBox "Aucun produit ne commence par ce caractère"
Exit Sub
Else
tb = dic_articles(Me.Cbx_produit.Value)
'// remplissage des contrôles TextBox du formulaire à partir du tableau des infos article
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
ctrl.Value = tb(I)
I = I + 1
End If
Next ctrl
End If
End SubSans garantie...
Bonne soirée
Merci Patty! j'ai plus le message d'erreur quand je rentre une mauvaise lettre, par contre j'ai toujours un message d'erreur quand je supprime la dernière lettre d'un code produit… vous auriez pas idée pour régler ce problème? merci encore
Cordialement
Bonjour
N'ai pas eu beaucoup de temps, me revoilà.
Mon idée, classer ta bdd : ce qui fait que dans ta combo, lorsque tu tapes un caractère, cela te positionne sur la première valeur trouvée proche de ce que tu recherches. Je ne vois pas l'intérêt de s'amuser à supprimer des caractères.
Voilà tout ce que tu dois reprendre pour retester.
A toi d'améliorer selon ton idée, je ne suis pas une pro...
Private Sub UserForm_Initialize()
Dim plage As Range, Ligne As Range
Dim id_produit As String
Me.Cbx_produit.SetFocus
Me.lblMessage = "Veuillez saisir le code produit."
Trier
'// création d'un dictionnaire dynamique des articles avec pour clé le code produit et pour item un tableau à 1 dimension des infos de l'article
Set dic_articles = CreateObject("Scripting.Dictionary")
For Each plage In Range("TStock2022").Areas
For Each Ligne In plage.Rows
id_produit = Ligne.Columns(1)
'double transpostion pour convertir le tableau à 2 dimensions (ligne.Value) en une seule
dic_articles(id_produit) = Application.Transpose(Application.Transpose(Ligne.Value))
Next Ligne
Next plage
'// chargement de la Combobox à partir des clés du dictionnaire des articles
Me.Cbx_produit.List = dic_articles.keys
End Sub
Sub Trier()
Range("TStock2022").Select
ActiveWorkbook.Worksheets("BaseDeDonnées").ListObjects("TStock2022").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("BaseDeDonnées").ListObjects("TStock2022").Sort. _
SortFields.Add2 Key:=Range("TStock2022[ID]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BaseDeDonnées").ListObjects("TStock2022").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Private Sub Cbx_produit_Change()
Dim ctrl As Control
Dim tb()
Dim I As Integer: I = 2
If Me.Cbx_produit.Value = "" Then Exit Sub
'// récupération du tableau des infos article à partir de la valeur de la clé du dictionnaire
If dic_articles.Exists(Me.Cbx_produit.Value) = False Then
MsgBox "Aucun produit trouvé"
Cbx_produit.Text = ""
Else
tb = dic_articles(Me.Cbx_produit.Value)
'// remplissage des contrôles TextBox du formulaire à partir du tableau des infos article
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
ctrl.Value = tb(I)
I = I + 1
End If
Next ctrl
End IfBon courage
Dis-moi si tu t'en sors
A d'accord je comprend mieux, merci pour le temps consacrer a mon problème Patty. passe une bonne journée.
Cordialement.