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.

12stockpdr-dei-2022.zip (414.77 Ko)

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 Sub

Sans 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 If

Bon 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.

Rechercher des sujets similaires à "erreur execution combobox"