XL 2016 Listbox avec des cases à cocher remplit la cellule

  • Initiateur de la discussion Initiateur de la discussion G@vroche
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
1 K
Retour