XL 2010 Première ligne d'un ComboBox qui reste vide

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Tout est dans le titre.
Je charge un ComboBox et, curieusement, la première ligne de sa liste est vide.
Dans la PJ c'est clair. On ouvre le formulaire, il y a 2 ComboBox. Les 2 ComboBox se chargent de 2 manières différentes :
- le 1er via un Array qui se trouve dans la procédure du formulaire --> ça marche
- le 2ème via via un Array qui se charge à partir d'une fonction --> 1ère ligne vierge

Comment résoudre le problème avec le 2ème ComboBox ?
 

Pièces jointes

  • ComboBox.xlsm
    22.6 KB · Affichages: 17

juvaxe

XLDnaute Occasionnel
Bonjour

J'ai fait un essai avec :

ReDim ListeLanguesTraduction(NbItems - 1)
For i = 1 To NbItems: ListeLanguesTraduction(i - 1) = NomJourSemaineTrip(1, , i): Next
ComboBox2.List = ListeLanguesTraduction 'charge la liste du ComboBox "ComboBox2"

Cdt
 

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, juvaxe,

Quand on écrit ReDim ListeLanguesTraduction(NbItems) cela définit le tableau en base 0.

Il faut le définir en base 1 avec ReDim ListeLanguesTraduction(1 To NbItems)

A+
 

Pièces jointes

  • ComboBox.xlsm
    25.1 KB · Affichages: 6

ChTi160

XLDnaute Barbatruc
Bonjour Magic Doctor
Bonjour le Fil ,le Forum
ou en mettant "Option Base 1" en tête de Module .
soit :
VB:
Option Explicit
Option Base 1 ' <--------------   Ici
Private Sub UserForm_Initialize()
Dim NbItems As Byte, i As Byte, ListeLanguesTraduction 
    ListeLanguesTraduction = Array("Espagnol", "Français", "Anglais", "Portugais")
    ComboBox1.List = ListeLanguesTraduction  'charge la liste du ComboBox "ComboBox1" 
    NbItems = NomJourSemaineTrip(, 1)        'nombre de langues pour la traduction répertoriées dans la fonction "NomJourSemaineTrip"
    ReDim ListeLanguesTraduction(NbItems)
    For i = 1 To NbItems: ListeLanguesTraduction(i) = NomJourSemaineTrip(1, , i): Next
    ComboBox2.List = ListeLanguesTraduction  'charge la liste du ComboBox "ComboBox2"
End Sub
Bonne journée
jean marie
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Bonjour job, ChTi160, le forum,

Merci job pour ce conseil de "passage" de Base 0 en Base 1.
L'exemple que j'avais donné était une version très épurée de l'application et la solution de juvaxe ne marchait plus (¡Caramba!). Je l'ai donc modifiée et là ça marchait :
VB:
Private Sub UserForm_Initialize()

Dim NbItems As Byte, i As Byte, ListeLanguesTraduction
    
    ListeLanguesTraduction = Array("Espagnol", "Français", "Anglais", "Portugais")
    ComboBox1.ListRows = 4                   'nombre de lignes de la liste du ComboBox "ComboBox1"
    ComboBox1.List = ListeLanguesTraduction  'charge la liste du ComboBox "ComboBox1"
    
    NbItems = NomJourSemaineTrip(, 1) - 1    'nombre de langues pour la traduction répertoriées dans la fonction "NomJourSemaineTrip"
    ReDim ListeLanguesTraduction(NbItems)
    For i = 0 To NbItems: ListeLanguesTraduction(i) = NomJourSemaineTrip(1, , i + 1): Next
    ComboBox2.ListRows = NbItems + 1         'nombre de lignes de la liste du ComboBox "ComboBox2"
    ComboBox2.List = ListeLanguesTraduction  'charge la liste du ComboBox "ComboBox2"
End Sub
Après avoir vu ta solution, je l'adopte car plus élégante :
VB:
Private Sub UserForm_Initialize()

Dim NbItems As Byte, i As Byte, ListeLanguesTraduction
    
    ListeLanguesTraduction = Array("Espagnol", "Français", "Anglais", "Portugais")
    ComboBox1.ListRows = 4                     'nombre de lignes de la liste du ComboBox "ComboBox1"
    ComboBox1.List = ListeLanguesTraduction    'charge la liste du ComboBox "ComboBox1"
    
    NbItems = NomJourSemaineTrip(, 1)          'nombre de langues pour la traduction répertoriées dans la fonction "NomJourSemaineTrip"
    ReDim ListeLanguesTraduction(1 To NbItems) 'base 1
    For i = 1 To NbItems: ListeLanguesTraduction(i) = NomJourSemaineTrip(1, , i): Next
    ComboBox2.ListRows = NbItems               'nombre de lignes de la liste du ComboBox "ComboBox2"
    ComboBox2.List = ListeLanguesTraduction    'charge la liste du ComboBox "ComboBox2"
End Sub
Bonne journée à tous.
 

juvaxe

XLDnaute Occasionnel
Bonjour Job75, Chti160

Merci pour vos compléments d'information.

Je n'avais pas osé me lancer dans une explication lors de ma réponse, n'étant pas certain de sa complétude. J'ai bien fait : en effet je me serais limité à la notion de numéro 0 pour le premier Item d'un tableau ou d'une listbox.

Cdt
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour ChTi160,

En effet, ta solution marche aussi. Si j'ai préféré celle de job75, c'est qu'elle évite que toutes les macros du module qui les contient ne soient sous le "régime" de la Base 1. En imposant Option Base 1, j'aurais dû modifier certaines macros.
 

Discussions similaires

Réponses
8
Affichages
403

Statistiques des forums

Discussions
315 168
Messages
2 116 933
Membres
112 922
dernier inscrit
Lobo-ASTUTO