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
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,
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
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: