XL 2013 List dynamique d'une ComboBox

SebastienBru

XLDnaute Nouveau
Bonjour à tous,

Pourriez-vous m'aider sur ce sujet qui concerne une ComboBox.
En effet, pour un certain besoin :
- J'ai utilisé un UserForm (Que j'ouvre à partir d'un bouton dans ma Feuil1) dans lequel j'ai des TextBox et une ComboBox nommée "TypeComboBox".
Or je souhaite que cette ComboBox possède comme variables l'ensemble des valeurs que j'ai dans ma feuille 2 nommée "Config" qui sont dans la colonne A, a partir de la ligne 1.

Voici le bout de code que j'ai utilisé :
Private Sub TypeComboBox_Change()

Dim i As Integer

With Worksheets("Config")
'Récupère les données de la colonne A...
For i = 1 To Range("A65536").End(xlUp).Row
TypeComboBox = Range("A" & i)
'...et filtre les doublons
If TypeComboBox.ListIndex = -1 Then TypeComboBox.AddItem Range("A" & i)
Next i
End Sub

Je reste disponible,

Merci
 

xUpsilon

XLDnaute Impliqué
Bonjour,

Tu as simplement oublié les .
Quand tu fais With ____, les arguments que tu entres ensuite s'attacheront à ce with uniquement si ils commencent par . , c'est à dire ici .Range("___")......

VB:
Private Sub TypeComboBox_Change()

Dim i As Integer

With Worksheets("Config")
'Récupère les données de la colonne A...
For i = 1 To .Range("A65536").End(xlUp).Row
TypeComboBox = .Range("A" & i)
'...et filtre les doublons
If TypeComboBox.ListIndex = -1 Then TypeComboBox.AddItem .Range("A" & i)
Next i
End Sub
Bonne continuation
 

Robert

XLDnaute Barbatruc
Bonjour Sébastien, xUpsilon, bonjour le forum,

Je ne pense pas que l'emplacement pour alimenter la combobox dans l'événement Change de cette même combobox soit le plus approprié. Je mettrai plutôt ce code à l'initialisation de l'UserForm. Outre la réponse correcte d'xUpsilon, je te propose le code ci-dessous qui utilise un objet Dictionary pour la gestion des doublons, bien plus rapide...

VB:
Private Sub UserForm_Initialize()
Dim OC As Worksheet 'déclare la variable OC (Onglet Config)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)

Set OC = Worksheets("Config") 'définit l'onglet OC
TV = OC.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avac les données en colonne 1 de TV
Next I 'prochaine ligne de la boucle
Me.TypeComboBox.List = D.keys 'alimente la combobox [TypeComboBox]avec la liste des éléments du dictionnaire D sans doublons
End Sub
 

SebastienBru

XLDnaute Nouveau
Merci pour ta réponse, en effet j'avais essayé de mettre un point à seulement un Range. Bref.

Je viens de mettre à jour et j'ai compris ce que tu me dis. Mais la liste n'apparait pas lorsque je déroule ma ComboBox.

Je vous joint le fichier, le code est dans le UserForm "AjoutLigneDepense", et dans la seule ComboBox .

Je n'ai fais que quelques heures de VBA, ne jugez pas la qualité :)


Je reste disponible !
 

Fichiers joints

Robert

XLDnaute Barbatruc
Re,

Est-ce que tu as vu mon premier post ?
Sinon, j'ai voulu changer le type dans la combobox de la page d'acceuil et... Plantage.
 

SebastienBru

XLDnaute Nouveau
Re,
Oui bien sûr j'ai effectué les changements suite à ton premier poste.
C'est à dire : "j'ai voulu changer le type dans la combobox de la page d'acceuil et... Plantage. " ?
 

Robert

XLDnaute Barbatruc
Re,

Dans l'onglet Feuil1 en haut tu as une combobox qui affiche Tous types. J'ai voulu en changer, plusieurs essais différent, et chaque fois le fichier plante...
 

SebastienBru

XLDnaute Nouveau
AH oui, ça c'est un autre problème que je n'aborderai pas dans ce sujet.
Mon problème ici concerne le bouton en haut à gauche "Ajouter une dépense". Et dans ce UserForm, la liste déroulante n'est pas liée à la liste de variable que j'ai dans la feuille "Config".

Cordialement,
 

SebastienBru

XLDnaute Nouveau
Dernier code que j'ai fait :
Private Sub TypeComboBox_Change()
Dim i As Integer
' On fabrique la liste déroulante (->sans la valeur retirée de la colonne A)
i = 1
TypeComboBox.Clear 'On efface toute la liste
Do While Feuil2.Cells(i, 1).Value <> ""
Feuil1.TypeComboBox.AddItem Feuil2.Cells(i, 1).Value
i = i + 1
Loop
End Sub

Ces lignes de codes fonctionnent pour un ComboBox sur une feuille. Or là, le ComboBox est dans un userform. Est-ce un problème du chemin d'accès dans la ligne après le Do While ?

Merci par avance,
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas