Combobox - ajout dynamique de données [Résolu]

Richard_9 26 Messages postés mardi 13 juillet 2004Date d'inscription 1 juillet 2008 Dernière intervention - 13 juil. 2004 à 10:07 - Dernière réponse : Richard_9 26 Messages postés mardi 13 juillet 2004Date d'inscription 1 juillet 2008 Dernière intervention
- 19 juil. 2004 à 10:10
Bonjour,
j'ai une liste dans les cellules A1: A3.
J'ai créé un combobox qui reprend la liste + une ligne vide afin de permettre d'ajouter quelque chose.
Le code sur Combobox_click() est le suivant :
LastCell = Range ("A1").End(Xldown).Offset(1,0).Adress
Combobox.ListFillRange = "A1:" & LastCell

Ce que je voudrais c'est lorsque l'utilisateur se positionne sur le dernier choix de la combobox (donc une cellule vide) et qu'il y ajoute quelque chose, je retrouve son introduction dans la dernière cellule de ma liste, (dans mon exemple en A4).
Cela permettrait à l'utilisateur de ne pas devoir aller modifier la liste mais de pouvoir d'une manière dynamique faire des ajouts qui seraient repris automatiquement pour ses prochaines introductions.
Merci de votre aide car je cherche la solution depuis déjà quelques jours.
Afficher la suite 

5 réponses

Meilleure réponse
Richard_9 26 Messages postés mardi 13 juillet 2004Date d'inscription 1 juillet 2008 Dernière intervention - 19 juil. 2004 à 10:10
3
Merci
OK Merci j'en tiens compte.
Je vais reprogrammer mes combo dans ce sens.
Autant s'éviter les problèmes lorsqu'ils sont connus.
A+
Richard

Merci Richard_9 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

madbob 285 Messages postés dimanche 14 décembre 2003Date d'inscription 13 mars 2012 Dernière intervention - 13 juil. 2004 à 16:21
0
Merci
Tu avais vraiment fait le plus gros

Si j'ai compris, tu peux essayer ça :

'* recupération de l'indice de la ligne + incrément pour la blanche
LastCell = Range("A1").End(xlDown).Row + 1
ComboBox1.ListFillRange = "A1:A" & LastCell

Pour le code il vaut mieux que tu le mettes dans l'evement change de ta feuille (Worksheet_SelectionChange) car sinon tu peux avoir des écarts dans la mise à jour graphique de ta liste.

Il faut bien sur quitter la cellule...
A+
madbob 285 Messages postés dimanche 14 décembre 2003Date d'inscription 13 mars 2012 Dernière intervention - 14 juil. 2004 à 12:46
0
Merci
J'avais peut être pas compris... Tu veux peut-être mettre à jour depuis la combobox.

Je sais faire comme ça :
je detecte la validation d'une nouvelle chaine de caractères dans la combobox et j'ajoute une nouvelle cellule contigue de la feuille.

L'evênement "change" de la feuille1 détecte l'ajout à la feuille et recharge la combo avec la nouvelle valeur ce qui donne

'* Détection de l'action valider (entree ) sur la combobox
Private Sub CB_LISTE1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim L_Chaine As String
Dim L_position As Integer

'* si l'action est entrée
If KeyCode = 13 Then
L_position = Me.CB_LISTE1.ListIndex

'* si j'ai bien ajouté une valeur des fois qu'on appui sur entrée alors qu'il s'agit d'une valeur sélectionnée...
If L_position = -1 Then
'* là il faut incrémenter
lastcell = Range("A1").End(xlDown).Row + 1
[blue] '* Récupération de la valeur de la combo
L_Chaine = Me.CB_LISTE1.Value
Range("A" & lastcell).Value = L_Chaine
End If
End If

End Sub

'* Mise à jour de la combo après ajout d'un nouvelle valeur
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
lastcell = Range("A1").End(xlDown).Row
Me.CB_LISTE1.ListFillRange = "A1:A" & lastcell
End Sub

NB : Tu n'as pas besoin de gérer une ligne blanche pour ta combo elle le fait très bien toute seule

madbob
Richard_9 26 Messages postés mardi 13 juillet 2004Date d'inscription 1 juillet 2008 Dernière intervention - 14 juil. 2004 à 14:50
0
Merci
Salut,
je m'en suis sorti autrement.

Le nom de mon comboBox s'appelle COMBOETAT
les données son reprises sur une autre feuille appellée COMBOBOXLIST et ici la première donnée est en D1

Sur le click j'ai mis ceci :
Private Sub ComboEtat_Click()

'Position de la cellule de départ
StartFeuille = "ComboBoxList"
Poscell = "D1"

LastCell = Sheets(StartFeuille).Range(Poscell).End(xlDown).Offset(1, 0).Address

Lien = StartFeuille & "!" & Poscell & ":" & LastCell
ComboEtat.ListFillRange = Lien

End Sub

Ensuite lorsqu'on quitte le combo :

Private Sub ComboEtat_LostFocus()

'Position de la cellule de départ
StartFeuille = "ComboBoxList"
Poscell = "D1"
LastCell = Sheets(StartFeuille).Range(Poscell).End(xlDown).Offset(1, 0).Address

If ComboEtat.ListIndex = -1 Then
Sheets(StartFeuille).Range(LastCell) = ComboEtat.Value
End If

LastCell = Sheets(StartFeuille).Range(Poscell).End(xlDown).Offset(1, 0).Address

Lien = StartFeuille & "!" & Poscell & ":" & LastCell
ComboEtat.ListFillRange = Lien

End Sub

Et cela fonctionne très bien.
madbob 285 Messages postés dimanche 14 décembre 2003Date d'inscription 13 mars 2012 Dernière intervention - 14 juil. 2004 à 15:18
0
Merci
Super.... l'important c'est d'y arriver.

Si je puis me permettre un conseil, la gestion du code au travers la gestion evennementielle des focus n'est pas une très bonne chose. Cela induit souvent des effets pervers innatendus et dans certain cas des boucles san fin, voire des problème lors du débugage.

Mais l'élément le plus important est que le lose focus pour valider une action de saisie qui n'est pas un élement sûr, il faut pour moi un acte de validation conscient et définitif plutôt qu'un click sur une cellule de la feuille ou ailleurs.

Bonne continuation
a+
madbob
:)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.