Supprimer choix sur la liste déroulante choix

xoxo -  
 xoxo -
Bonjour,

j'ai créer ma liste déroulante de choix, ce que je voudrais, c'est qu'à chaque fois que je sélectionne un choix pour une première case par exemple celui-ci disparaisse des cases suivantes sur ma liste déroulante, est-ce possible sur Excel 2003?
merci pour vos réponses

A voir également:

4 réponses

Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 451
 
Bonjour

Quelques explications, non ce n'est pas très compliqué et ça peut être plus simple selon vos besoins:

en l'état du modèle:

Feuille F_1 colonne A:
la liste originale de vos valeurs à placer dans le menu déroulant (soit en colonne E:E)
en colonne B:
une formule de qui permet de détecter si le nom est déjà utilisé ou pas, selon ce principe:

=SI(NB.SI(E:E;A2)=1;0;MAX($B$1:B1)+1)

NB.SI(E:E;A2) compte le nombre de fois où la valeur de A2 se trouve dans la colonne E
si la valeur y est une fois, la formule renvoie 0 sinon:
MAX($B$1:B1) incrémente de 1 chaque fois que NB.SI trouve une valeur inexistante en colonne E
remarquez que dans ce code, le premier $B$1 est bloqué, pas le second, de façon à étirer le champ en descendant la formule
ainsi MAX(..;..)+1 incrémente bien de 1 à chaque fois que la condition est correcte.
On obtient donc en colonne B une numérotation progressive des noms utilisables en éliminant les "déjà pris"

en colonne C la formule recrée la liste avec les noms restants selon:

=SI(LIGNE()-1>MAX($B$2:$B$27);"";INDEX($A$2:$A$27;EQUIV(LIGNE()-1;$B$2:$B$27;0);1))

Le code LIGNE() renvoie le N° de ligne où se trouve la formule donc en LIGNE()-1 en C2 renvoie 1 , en C3 2 etc...

la première partie de la formule évite l'affichage #N/A lorsque la valeur de LIGNE()-1 n'existe pas en colonne B
avec LIGNE()-1>MAX($B$2:$B$27)
ainsi la formule renvoi "" (rien) si le N° ligne -1 est plus grand que le maxi en colonne de codage

si la valeur LIGNE()-1 existe en B:
INDEX($A$2:$A$27;EQUIV(LIGNE()-1;$B$2:$B$27;0);1))
code INDEX renvoi la valeur trouvée dans le champ au N° de ligne indiqué et N° de colonne (du champ, pas de la feuille)
principe:=INDEX(Ligne;Colonne)

le code EQUIV renvoi le N° de ligne du champ correspondant à la valeur cherchée dans le champ (une colonne seulement)
le 0 qui termine le code est un code excel interdisant de ressortir une valeur proche
principe:=EQUIV(Valeur;champ colonne;0)
donc:
EQUIV recherche LIGNE()-1 en colonne B et ressort le N° de ligne du champ correspondant

et INDEX($A$2:$A$27(EQUIV(....))
ressort la valeur trouvé au N° de ligne du champ définit par EQUIV et dans la première colonne (définie par le;1) final

La liste reconstituée est donc évolutive en fonction du nombre de noms restants.

pour faciliter la mise en place de la validation, cette liste en colonne C est nommée selon le principe ci dessous:
Insertion/ Nom / Définir un nom
ce nom de LST est défini par la formule:
=INDIRECT("C2:C"&NB.SI(F_1!$C$2:$C$27;"><"))
soit:INDIRECT(...) qui transforme un texte en adresse de champ
"C2:C" pour définir en texte le départ du champ, invariable
& qui est le signe permettant de lier en la suite au texte, et ensuite
NB.SI(F_1!$C$2:$C$27;"><"))
qui compte le nombre de valeur dans le champ différentes de "", donc le nombre de cellules de la colonne C avec un nom

ainsi la liste s'ajuste en permanence au nombre de noms trouvés en C2:C27

Validation en colonne E:
=Validation de liste, il suffit alors d'entrer dans la fenêtre dce validation, en bas,:
=LST soit = nom donné à la liste.

A noter que cette solution en nommant le champ vous permet de placer la validation sur une autre feuille, ce qui n'est pas le cas si vous spécifiez simplement le champ.Ainsi, vous pouvez masquer la feuille qui sert à l'établissement de la liste


Cette solution donne quelque chose de complet et propre mais on peut faire plus simple si la liste originale n'est pas trop longue:

Toujours d'après le modèle:
de A2 à A27 la liste originale
nommez le champ B2:B27
en B2 la formule:
=SI(NB.SI(E:E;A2)=0;A2;"")
vous aurez alors dans le champ B une liste où ne se retrouveront que les noms inexistants en E
La validation sera donc faite par une liste "à trous" dont les noms déjà utilisés auront disparus.

Ouf,... bon courage..
ce n'est pas très facile à expliquer en prenant dès le tout début !!!
j'espère avoir été à eu près clair, mais c'est plus complexe à expliquer qu'à appliquer!

Revenez si besoin, peut être avec un modèle à adapter que vous pourrez placer sur:
http://www.cijoint.fr en revenant ici éditer le lien

crdlmnt

1
xoxo
 
Re!

J'y suis parvenue avec votre exemple de départ mais aussi avec vos explications, néanmoins je trouve tout de même cette manip complexe, mais je n'y serais pas arrivée sans votre aide.
Alors un GRAND MERCI... et au plaisir
1
xoxo
 
Bonjour Vaucluse,

c'est exactement ce qu'il me faut!
Serait-il possible d'avoir plus de détails et me dire quelles ont été vos manipulations? Cela m'a l'air compliqué
Merci d'avance pour vos explications...
0
Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 451
 
Bonjour
quelque chose comme ça?

http://www.cijoint.fr/cjlink.php?file=cj201103/cijOFNv43l.xls

revenez si besoin pour adaptation
crdlmnt

-1