Msg erreur USerForm VBA

Bonjour,

j'ai un doc (fichier test ci-joint) qui quand je passe/clique sur la cellule C12, affiche un formulaire (UserForm) qui permet de rechercher le libellé de son choix. On tape le nom du libellé et lorsqu'on le sélectionne s'affiche le secteur et la catégorie du libellé correspondant.

J'ai un message d'erreur quand je sélectionne un libellé et je ne comprend pas pourquoi.

Je souhaiterais que mon UserForm n'affiche que le liste des Libellés mais que dans les cellules de la feuille s'affiche les informations des autres colonnes de l'onglet Nomenclature (secteur et activité).

Je vous remercie d'avance

Julia

capture d ecran 2019 02 12 a 09 40 19
16gad-copie.xlsm (37.48 Ko)

Bonjour,

C'est cette instruction qui pose problème :

    Me.ListBox1.List = Range("Tableau1[LibellŽ]").Value

Remplacer le Ž par é

A+

Bonjour,

Les problèmes dans ton code étaient multiples (je ne parlerai pas du problème de code caractère dont a parlé galopin, car je pense que ça vient de nos pc windows, alors que tu es en mac):

Dans : Private Sub UserForm_Initialize()

Me.ListBox1.List = Range("Tableau1[LibellŽ]").Value

Tu t'embêtes à dire que ta liste ne contient que 4 colonnes, puis tu lui affectes les valeurs d'un tableau à une dimension, ça fixe donc ton tableau au nombre de 1 colonne, plus tard, quand tu vas vouloir affecter la valeur de la colonne n°2 et ainsi de suite, tu vas donc avoir un souci.

Dans : Private Sub TextBox1_Change()

For Each c In Application.Index(Range("Tableau[EligibilitŽ]:[LibellŽ]"), , 4)

Je ne sais pas trop ce que tu as essayé de faire ici, mais si tu voulais juste parcourir la colonne Libellé de ton tableau, il fallait mettre Tableau1[Libbellé], et rien d'autre, tu avais aussi oublié le 1 de "Tableau1" dans le nom du tableau.

ensuite :

Me.ListBox1.AddItem

Me.ListBox1.List(i, 0) = c.Offset(0, -3).Value

ce n'est pas une erreur qui va empêcher le programme de fonctionner je pense, mais plus une erreur de réflexion, tu ajoutes un item, et alors que tu pourrais directement donner la valeur de cet item sur cette ligne, tu décides d'ajouter une ligne en plus pour le faire, tu peux juste écrire:

Me.ListBox1.AddItem c.Offset(0, -3).Value

Qui peut aussi s'écrire:

ListBox1.AddItem c.Offset(0, -3)

code corrigé:

Private Sub UserForm_Initialize()
Dim cel As Range
    With ListBox1
        .ColumnCount = 4
        .ColumnWidths = "40;140;100;100"
    End With
    For Each cel In Range("Tableau1[Libellé]") 'ou mettre ListBox1.list = Range("Tableau1[Eligibilité]:[Libellé]") si tu veux afficher les infos des 4 colonnes
        ListBox1.AddItem cel
    Next cel
End Sub

Private Sub TextBox1_Change()
    ListBox1.Clear
    i = 0
    For Each c In Range("Tableau1[Libellé]")
        If UCase(c) Like "*" & UCase(TextBox1) & "*" Then
            ListBox1.AddItem c.Offset(0, -3)
            ListBox1.List(i, 1) = c.Offset(0, -2)
            ListBox1.List(i, 2) = c.Offset(0, -1)
            ListBox1.List(i, 3) = c.Offset(0, 0)
            i = i + 1
        End If
    Next c
End Sub

Espérant avoir pu éclaircir ton problème.

Re,

merci pour la réponse qui a éclairci certains points mais j'ai copié le code dans mon fichier et le formulaire affiche les 4 colonnes du tableau Nomenclature et non pas seulement la liste des Libellé comme je l'ai demandé..

(voir capture d'écran)

Merci encore

capture d ecran 2019 02 12 a 14 46 15

Re,

En fait, vu ton code, je pensais que tu voulais voir les 4 colonnes avec les informations, parce que c'est ce que tu essayais de faire dans ton code, si tu veux juste les libelés, alors il faut faire ça :

Private Sub UserForm_Initialize()
Dim cel As Range
    With ListBox1
        .ColumnCount = 4
        .ColumnWidths = "40;140;100;100"
    End With
    For Each cel In Range("Tableau1[Libellé]") 'ou mettre ListBox1.list = Range("Tableau1[Eligibilité]:[Libellé]") si tu veux afficher les infos des 4 colonnes
        ListBox1.AddItem cel
    Next cel
End Sub

Private Sub TextBox1_Change()
    ListBox1.Clear
    i = 0
    For Each c In Range("Tableau1[Libellé]")
        If UCase(c) Like "*" & UCase(TextBox1) & "*" Then
            ListBox1.AddItem c.Offset(0, -3)
            'ListBox1.List(i, 1) = c.Offset(0, -2)
            'ListBox1.List(i, 2) = c.Offset(0, -1)
            'ListBox1.List(i, 3) = c.Offset(0, 0)
            i = i + 1
        End If
    Next c
End Sub

Merci pour ta réponse, seulement j'ai inscrit le code que tu m'a envoyé dans mon fichier mais celui-ci ne semble pas fonctionner correctement..

(voir capture d'écran)

Pourriez vous m'aider?

Merci d'avance

capture d ecran 2019 02 14 a 17 09 30

Bonjour,

En effet, il y avait plusieurs soucis dans mon codage, j'ai modifié deux trois choses, et maintenant tu n'as plus que les libellés:

Rechercher des sujets similaires à "msg erreur userform vba"