Liste déroulante boîte à outil contrôle

Fermé
Melmex - 6 mai 2011 à 10:25
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011 - 16 mai 2011 à 16:47
Bonjour à tous ceux qui passe par ici,

Alors voila mon petit problème. On ne peut pas dire que je sois une pro sur excel donc j'aurais besoin de votre aide :
Sur une feuille excel, qu'on appellera Feuil1, j'ai inséré une liste déroulante de la "Boîte à Outil de contrôle" ("ComboBox1"). J'ai ensuite tapé ma liste sur une autre feuille, qu'on appellera Feuil2. J'ai nommé cette Liste "Liste1" puis je l'ai inséré dans la "ComboBox1". Jusqu'à là tout va bien.

Maintenant je souhaiterais que lorsqu'un utilisateur inserre un nouveau nom dans ma "ComboBox1", ce nom siot automatiquement ajouté à ma "List1" de la Feuil2 pour que la personne suivante puisse trouver ce nouveau nom dans la liste déroulante!

Merci

Cordialement
Melmex

PS : Si quelqu'un pourrait en plus me dire comment on peut centrer notre selection de la liste déroulante, dans la comboBox1 se serait très aimable!
A voir également:

3 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
9 mai 2011 à 10:16
Bonjour,

Pour centrer le texte, tu vas dans propriété de ton bouton (en mode création, clic droit) et tu as TextAlign, tu choisis 2-fmtextalignercenter.

Pour la seconde, il faut faire une macro :
Outils, macro, visual basic éditor.
a gauche, tu double cliques sur ta feuille et tu colles ca :
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'combobox1 est le nom de ta liste déroulante, si c'est pas ca, remplace par son nom, tu l'as dans propriété name
a = ""
i = 1 'si tes valeurs commencent à la ligne ecris i=2, si c'est 3, i=3
Do While Sheets("Feuil2").Cells(i, 1) <> "" 'cells(ligne, colonne), s ta colonne est 2 mets cells(i,2)
If Cells(i, 1) = ComboBox1.Value Then 'idem pour le nom de ta liste déroulante
a = 1
End If
Loop
If a = "" Then
Cells(i, 2) = ComboBox1.Value 'idem pour le nom de ta liste déroulante
End If
a = ""
End Sub

A chaque fois que tu feras un double clic sur ta liste déroulante, ca vérifiera si la donnée est présente et le cas échéant ca l'ajoutera
1
Merci beaucoup melanie1324! ^^

(Désolé de répondre que maintenant)
0
J'ai une tite question par rapport à ton code :
Je ne comprend pas trop à quoi sert cette partie, tu pourrais m'expliquer? (et du coup je ne sais pas quelle numero de colonne je dois mettre à la place du "2")

Loop
If a = "" Then
Cells(i, 2) = ComboBox1.Value 'idem pour le nom de ta liste déroulante
End If
a = ""
End Sub

Merci
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 12:13
Bon alors en fait, ça ne marche pas! ^^
Je tape :
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
a = ""
i = 1
Do While Sheets("Feuil46").Cells(i, 2) <> ""
If Cells(i, 2) = ComboBox1.Value Then
a = 1
End If
Loop
If a = "" Then
Cells(i, 2) = ComboBox1.Value
End If
a = ""
End Sub

Et lorsque je test il y a un bug et ça surligne en jaune la ligne
"Do While Sheets("Feuil46").Cells(i, 2) <> "" "

et je n'arrive pas à comprendre pourquoi!
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 12:14
Ah en fait je pense que c'est parce que j'essai de l'adapter sur le UserForm et il ne faut peut etre pas faire de la même manière?!
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
16 mai 2011 à 10:48
Cette partie permet de balayer ton tableau.
Si ta valeur est dans ton tableau alors a=1
si ta valeur n'est pas dans ton tableau alors a=""
si a="", on rajoute la valeur.

Est-ce plus clair?

Si ca ne l'est pas rapetisse la fenetre ou tu as ton code et appuies sur f8.
Tu verras sur excel, ce que ca fait.
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 11:44
Si, Merci Mélanie, c'est plus clair.
Donc en fait je met pareil dans chacun des "cells(1,2)".

(PS: je t'ai envoyé un mail avec un autre problème de liste déroulante, je ne sais pas si tu as vu. Si tu pouvais m'aider j'apprecierais vraiment :/)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 mai 2011 à 12:11
Bonjour

si ta liste ne comporte pas de trous
la liste commence dans cette démo en C2 feuille2
ton combo en feuille1

chaque que tu ajoutes ou modifies une donnée dans la liste, le combo est mis à jour

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nbre As Byte
If Not Intersect(Target, Range("liste")) Is Nothing Then
nbre = Application.CountA(Range("liste"))
Feuil1.ComboBox1.ListFillRange = "feuil2!$C$2:$C$" & nbre + 2
End If
End Sub


pour installer la macro:
copier cette macro
clic droit sur l'onglet de la feuille2 (où il y a la liste)
visualiser le code
coller
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 12:18
Bonjour Michel, :)

Merci pour ta réponse!

Et si je met cette ComboBox1 dans un userform il faudrait modifier quoi dans ton code pour l'adapter?
Merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 mai 2011 à 13:57
Tout dépend si ta liste peut être modifiée ou non après le lancement de l'userform et avant unload.

ici le combo propose les éléments présents dans ta liste au lancement de l'userform ( il n'est plus nécessaire de garder un nom à la liste
toujours si ta liste n'a pas de trous!

Private Sub UserForm_Initialize()

For lig = 2 To Feuil2.Range("C2").End(xlDown).Row
     ComboBox1.AddItem Feuil2.Cells(lig, "C")
Next
End Sub
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 14:07
Comment peut-on savoir si elle peut être modifié ou non après le lancement de l'UserForm?
Si je ne donne pas de nom à la liste comment la comboBox va chercher les nom de la liste?

Lorsque je tape ce code et que je lance le UserForm pour tester :

Private Sub UserForm_Initialize()
For lig = 1 To Feuil46.Range("B1").End(xlDown).Row
ComboBox1.AddItem Feuil46.Cells(lig, "B")
Next
End Sub

Il y a un bug. il y a UserForm1.show surligné en jaune alors que sans ce code il n'y a pas de problème.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
16 mai 2011 à 14:40
Il y a un bug.
J'avais testé avant de t'envoyer ce bout de code: c'était OK

Comment peut-on savoir si elle peut être modifié ou non après le lancement de l'UserForm?

Il faut que un de tes codes fasse une modif directement ou indirectement à partir de l'userform puisque ce dernier a pris la main
0
Melmex Messages postés 11 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 18 mai 2011
16 mai 2011 à 16:47
Il ne faudrait pas le mettre ailleurs ce code? ou pas pour "initialize" mais un autre truc ?
0