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.

200528112836127780

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.

200528113730248266

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" De plus, lorsque je valide le formulaire, ma cellule "Liste du ou des articles commandés" n'est pas complétée.

Ici j'avais choisi le code "BFM".

(cliquer pour agrandir)

mini 20052909331771156

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.

200529112927265495

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

Rechercher des sujets similaires à "erreur execution 32811 lisbox"