XL 2016 Listbox avec des cases à cocher remplit la cellule

G@vroche

XLDnaute Nouveau
Bonjour,

Avant tout je précise que je suis novice en VBA.
Mais grâce notamment à ce forum, j'ai réussi à créer un USF qui marche plutôt bien. Mais je voudrai encore l'améliorer.

J'ai une Listbox avec cases à cocher qui me permet de remplir les cellules.
Quand je coche une case, le texte est rempli dans la cellule.
Si je coche une 2ème case, le texte s'ajoute avec un "-"
Si j'en décoche une, le texte et le "-" se retirent
Mais si je décoche tout, j'ai une erreur d'exécution '5'

Je voudrai que si je décoche tout, la cellule se vide complètement.
J'espère avoir été assez clair. Je vous joint le fichier correspondant.
Je précise que c'est juste une partie de mon fichier que j'ai simplifié pour cette discussion.

Merci pour votre aide
 

Pièces jointes

  • Listbox.xlsm
    58.1 KB · Affichages: 16
Solution
Bonjour,

Il y a 13 listbox invisibles sur votre feuille. Attention lorsque vous manipuler et insérer des objets activex.

Juste un test à changer dans votre ListBox1_Change:
If Len(sTemp1) > 0 Then sTemp1 = VBA.Left(sTemp1, VBA.Len(sTemp1) - 1)
VB:
Private Sub ListBox1_Change()
  If bTest Then
    Exit Sub
  End If
  sTemp1 = ""
  For i = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(i) Then
      sTemp1 = sTemp1 & Me.ListBox1.List(i) & "-"
    End If
  Next
  If Len(sTemp1) > 0 Then sTemp1 = VBA.Left(sTemp1, VBA.Len(sTemp1) - 1)
  ActiveCell = sTemp1
End Sub

Cordialement

Ikito

XLDnaute Occasionnel
Bonjour G@vroche,

Une piste : Quand tu veux supprimer le premier élément écrit, il essaye de supprimer l'élément et le "-" qui le précède, alors qu'il n'y en a pas. D'où l'erreur.
Ça marche bien pour les 2 strings suivants car ils sont précédés par le "-".

En clair : Ton code essaye de supprimer un caractère qui n'existe pas, donc plante.

La modification est juste ici, avec gestion de l'erreur.

VB:
On Error GoTo ClearCell
  sTemp1 = VBA.Left(sTemp1, VBA.Len(sTemp1) - 1)
  ActiveCell = sTemp1
  Exit Sub
ClearCell:
  ActiveCell = ""
End Sub
 

Pièces jointes

  • Listbox.xlsm
    62.3 KB · Affichages: 29

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Il y a 13 listbox invisibles sur votre feuille. Attention lorsque vous manipuler et insérer des objets activex.

Juste un test à changer dans votre ListBox1_Change:
If Len(sTemp1) > 0 Then sTemp1 = VBA.Left(sTemp1, VBA.Len(sTemp1) - 1)
VB:
Private Sub ListBox1_Change()
  If bTest Then
    Exit Sub
  End If
  sTemp1 = ""
  For i = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(i) Then
      sTemp1 = sTemp1 & Me.ListBox1.List(i) & "-"
    End If
  Next
  If Len(sTemp1) > 0 Then sTemp1 = VBA.Left(sTemp1, VBA.Len(sTemp1) - 1)
  ActiveCell = sTemp1
End Sub

Cordialement
 

G@vroche

XLDnaute Nouveau
Bonjour Reblochon.

Ta solution fonctionne très bien également.
Si Ikito dit qu'elle est plus propre, alors je vais l'utiliser.

Quant aux 13 autres listbox, c'est parce que j'ai nettoyé un peu trop vite mon fichier avant de le poster.

Merci à tous
 

Discussions similaires

Réponses
10
Affichages
420

Statistiques des forums

Discussions
312 143
Messages
2 085 757
Membres
102 964
dernier inscrit
Juliopapadopulos