Macro VBA ListBox : erreur si une seule entrée

Macro VBA ListBox : erreur si une seule entrée - VB/VBA/VBS - Programmation

Marsh Posté le 18-11-2016 à 11:57:08    

Bonjour,
 
Je reviens vers vous pour une nouvelle question, comme dit dans le message precedent ( par ici ) je veux afficher la liste des couleurs que j'ai crée, pour ça j'utilise le bout de code suivant :
 

Code :
  1. Dim nb_couleurs As Integer
  2. Private Sub UserForm_Initialize()
  3.     Sheets("Couleurs" ).Activate
  4.     nb_couleurs = Range("A1" ).End(xlDown).Row
  5.     ListBox1.List() = Range(Cells(2, 1), Cells(nb_couleurs, 1)).Value
  6.    
  7. End Sub


 
Le soucis est que si je n'ai qu'une seule entrée dans mon tableau, ça plante, je pense à cause du Range d'une seule case.
 
Le message d'érreur :
Erreur d'exécution '381':
 
Impossible de definir la propiété List. Index de table de proprietés non valide.
 
 
Je sais que ça doit être un problème deja abordé, mais je n'arrive pas à trouver de réponse accéssibles à mon niveau pour pallier à ça.
 
Le problème n'est pas majeur, car il ne devrait "normalement" jamais y avoir qu'une seule valeur dans le tableau, mais je n'aime pas l'idée de sortir du code qui puisse planter "sur un malentendu", surtout que les utilisateurs derriers ne feront aucun éffort pour comprendre.
 
Encore une fois merci de votre aide,
 
 :hello:

Reply

Marsh Posté le 18-11-2016 à 11:57:08   

Reply

Marsh Posté le 23-11-2016 à 16:33:13    

 
            Bonjour,
 
            comme indiqué dans l'aide VBA interne concernant  List  utiliser la méthode  AddItem  …
 

Reply

Marsh Posté le 24-11-2016 à 09:21:31    

Effectivement, maintenant que j'ai plus d'expérience, j'ai revu le code en utilisant cette methode et c'est passé tout seul, pour les curieux voila le code :
 

Code :
  1. Private Sub UserForm_Initialize()
  2.     Sheets("Couleurs" ).Activate
  3.     color_num = Range("A1" ).End(xlDown).Row
  4.    
  5.     For i = 2 To color_num
  6.     color_select_value = Cells(i, 1).Value
  7.     color_select.AddItem color_select_value
  8.     Next i
  9.    
  10.    
  11. End Sub


 
Désolé pour le dérangement  :jap:

Reply

Marsh Posté le 24-11-2016 à 10:51:50    

 
            La ligne n°6 est inutile, ajouter directement la valeur de la cellule :  color_select.AddItem Cells(i, 1).Value  …
 

Reply

Marsh Posté le 24-11-2016 à 12:39:07    

Merci pour l'astuce, mon code est encore très brouillon, mais je l'améliore petit à petit avec tout ce que j'apprend et que vous m'apportez :)

Reply

Marsh Posté le 24-11-2016 à 14:50:33    

Code :
  1. Private Sub UserForm_Initialize()
  2.     With Worksheets("Couleurs" ).Cells(1).CurrentRegion.Rows
  3.         Select Case .Count
  4.                Case 1:      Exit Sub
  5.                Case 2:      color_select.AddItem .[A2].Value
  6.                Case Else:   color_select.List() = .[A2].Resize(.Count - 1).Value
  7.         End Select
  8.     End With
  9. End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed