Erreur d'exécution '32811' sur Lisbox
Bonjour
Je viens demander un peu d'aide suite à un comportement étrange que j'ai avec le contrôle de formulaire ci-dessous.
Dans cet ancien sujet https://forum.excel-pratique.com/viewtopic.php?p=832507#p832507 je cherchais à construire un outil permettant de choisir rapidement des items dans une liste prédéfinie. C'est ce que vous retrouvez ci-dessus, adapté à mon besoin final.
Le fonctionnement du formulaire :
L'utilisateur entre le code recherché dans la textbox "Produits" et cela filtre en temps réel la listbox juste en dessous. Lorsqu'il ne reste plus qu'un seul code dans Listbox, l'utilisateur appuie deux fois sur la touche entrée de son clavier pour faire passer le code recherché dans la listbox de droite puis réinitialiser la textbox de gauche.
Toutefois, j'obtiens (parfois) une erreur d'exécution '32811' lorsque j'appuie pour la première fois sur la touche "Entrée" de mon clavier après avoir choisi le code que je souhaite ajouter.
En cliquant sur le débogage, le code s'arrête à cette ligne :
d.Remove clé
Il est présent dans la sub Private Sub b_prend2_Click()
qui est au sein de mon formulaire.
Ce que je ne comprends pas, c'est que cette erreur ne se produit pas tout le temps...
Voici mon fichier de test, c'est exactement le même que mon fichier final mais sans données "sensibles".
Merci d'avance pour votre aide, de mon côté je sèche ...
Horusbk
Bonjour horusk,
Je ne comprend pas à quoi correspond ton bouton "b_prend2" il ne se sélectionne pas dans ton UsF
Ton problème venait de là, bouton renommé "b_Ajoute"
@+
Bonjour BrunoM45,
Navré de la réponse tardive, je bossais.
Merci pour ta réponse
Je viens de tester ta proposition et j'ai l'impression que ça ne fonctionne pas. Lorsque j'entre dans la textbox le code voulu puis que je clique sur ma touche "Entrée" (une fois, deux fois ...) rien ne se passe. Le code n'est pas ajouté dans la seconde listbox.
Je ne comprend pas à quoi correspond ton bouton "b_prend2" il ne se sélectionne pas dans ton UsF
Il permet de prendre le seul item restant affiché dans la Listbox "Source2" après que l'utilisateur ait filtré via la textbox "TextBox3". Li'tem sélectionné est ensuite ajouté dans la Listbox "Dest" puis on enlève de la Listbox "Source2" l'item précédemment ajouté.
Ce mécanisme s'effectue lorsque l'utilisateur entre le code recherché en entier, par exemple 'CLR' puis appuie deux fois sur sa touche "Entrée" pour (1) ajouter l'item à la listbox "Dest" puis (2) réinitialiser "TextBox3", ré-afficher tous les codes dans "Source2" et enlever le code précédemment cherché de "Source2".
La Sub Private Sub B_enlève_Click()
effectue le mécanisme inverse une différence près.
L'utilisateur doit sélectionner dans "Dest" le code à enlever puis appuyer sur le bouton "Retirer".
J'espère que c'est plus clair
N'hésites pas si tu souhaites davantage de précisions.
@+
Horusbk
Bonjour,
j'ai réussi à l'avoir avec clé="" qui n'existe pas. Donc :
If d.exists(clé) Then d.Remove clé
A voir s'il y a d'autres cas pour ce n° d'erreur.
eric
Bonjour Eriic,
Merci pour ta réponse, dans j'ai remplacé dans la Sub b_prend2_Click
la ligne d.Remove clé
par ton code If d.exists(clé) Then d.Remove clé
. C'était ce qu'il fallait faire ?
Private Sub b_prend2_Click()
'b_tout_Click
If Me.Source2.ListCount >= 0 And Me.Source2.ListIndex <> -1 Then
Me.Dest.AddItem Me.Source2
clé = Source2
'd.Remove clé
If d.exists(clé) Then d.Remove clé
Me.Source2.RemoveItem Me.Source2.ListIndex
End If
Me.TextBox1 = Me.Dest.ListCount
End Sub
Maintenant j'ai un nouveau soucis qui apparaît, lorsque j'ajoute à "Dest" un code, celui-ci est bien compté dans "Nbr de produits sélectionnés" mais il n'apparaît plus dans la Listbox "Dest"
Ici j'avais choisi le code "BFM".
(cliquer pour agrandir)
Revoici mon fichier test avec la modification du code et mon test :
Merci d'avance pour votre aide,
@+
Bonjour,
C'était ce qu'il fallait faire ?
oui, et tester si ton problème est entièrement résolu.
Maintenant j'ai un nouveau soucis
Il n'est pas nouveau, il devait être présent avant.
Merci de démarrer un nouveau topic avec un titre adéquat pour les lecteurs qui font d'abord une recherche.
si c'est le cas
eric
Bonjour Eriic,
Il n'est pas nouveau, il devait être présent avant.
En fait avant de toucher au code, les fois où je n'avais pas l'erreur '32811' ma listbox "Dest" était bien remplie avec les codes sélectionnés puis la cellule "Liste du ou des articles commandés" était complétée.
Or depuis que j'ai modifié avec If d.exists(clé) Then d.Remove clé
j'ai ce problème qui est apparu.
Bien évidemment puisque tu avais en premier l'erreur 32811 du fait de son absence.
Maintenant ta question est toute autre : pourquoi est-il absent ?
Soit tu ne l'as pas mis, soit tu cherches à le supprimer une 2nde fois.
Cherche dans cette direction et si tu ne trouves pas : nouveau topic.
Celle-ci est bien résolue.
eric
Salut Eriiic,
Merci pour ton éclaircissement, je n'avais pas compris
EDIT:
Avant de clore définitivement le sujet
J'ai réédité ainsi le code :
Private Sub b_prend2_Click()
'b_tout_Click
If Me.Source2.ListCount >= 0 And Me.Source2.ListIndex <> -1 Then
If d.exists(clé) Then d.Remove clé
Me.Dest.AddItem Me.Source2
clé = Source2
Me.Source2.RemoveItem Me.Source2.ListIndex
End If
Me.TextBox1 = Me.Dest.ListCount
End Sub
J'ai placé le bout de code de Eriiic après If Me.Source2.ListCount
et non en lieu et place de l'ancien
d.Remove clé
Est-ce que ça reste correct comme écriture ?
En tout cas j'ai de nouveau les codes sélectionnés dans "Dest" qui sont apparents.
Si ça ne plante pas, c'est correct. Maintenant est-ce que ça fait ce que tu veux que ça fasse, il n'y a que toi pour le constater
Pour la xième fois :
Pour le moment tout fonctionne, si besoin j'ouvrirais un nouveau sujet.
@+
Horusbk