Supprimer valeurs d'une zone de liste déroulante au fur et à mesure de leur choix

13GIBE59

XLDnaute Accro
Bonjour le forum.

Dans le fichier joint, je choisis pour les cellules A1 à A7 une valeur issue d'une zone de liste déroulante.

Peut-on supprimer de cette zld la valeur déjà choisie ?
C'est çà dire que si j'affecte mardi en A3, ma zone de liste ne comprendra que lundi, mercredi, jeudi, vendredi, samedi et dimanche.

Et ainsi de suite jusqu'à ce que la zone de liste soit vide !

Merci d'avance.

PS : j'ai la même demande pour une combo dans un userform, cette solution me convient aussi.
 

Pièces jointes

  • ZLD.xlsm
    16.1 KB · Affichages: 115
  • ZLD.xlsm
    16.1 KB · Affichages: 93
  • ZLD.xlsm
    16.1 KB · Affichages: 104

13GIBE59

XLDnaute Accro
Re : Supprimer valeurs d'une zone de liste déroulante au fur et à mesure de leur choi

Merci Boisgontier, merci Cisco.

Cisco, je t'assure que j'ai cherché (comme d'hab) sur le forum, que je sais très riche, mais : j'ai pas trouvé !
Désolé.

Cordialement.
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer valeurs d'une zone de liste déroulante au fur et à mesure de leur choi

Bonjour a tous

Tres en retard !!

Mais puisque c'est fait !!!
 

Pièces jointes

  • ZLD.xlsm
    26.9 KB · Affichages: 245
  • ZLD.xlsm
    26.9 KB · Affichages: 148
  • ZLD.xlsm
    26.9 KB · Affichages: 159

PERES

XLDnaute Nouveau
Bonjour,

Je me permets de vous demander votre aide, je n'ai pas trouver réponses à mes questions...
Quelques jours que j'essaie x solutions, en vain. J'espère que vous pourrez m'aider.

Voici mon petit problème:
Je fais une liste d'émargement, il me faut quelques fonctionnalités dans ce fichier (fichier effectué dans le cadre de mon BTS) .
Je fais apparaître le nom de chaque salarié en fonction du service --> validation de données.
Mais je souhaiterai qu'à chaque nouvelle sélection d'un salarié, son nom n'apparaisse plus dans la liste déroulante.
Les noms étant issus d'une validation de données (liste déroulante) je n'arrive pas à trouver la solution... :(

Dans l'attente d'un retour... *prie*
Et vous remercie sincèrement par avance.

Bien cordialement,

Anaïs
 

Pièces jointes

  • feuille-emargement-2018.xlsm
    44 KB · Affichages: 55

CISCO

XLDnaute Barbatruc
Bonjour

Une possibilité en pièce jointe. Cf. le nom liste évolutive défini dans le gestionnaire de noms. Mais tu peux aussi faire directement avec la formule matricielle à valider avec les 3 touches Ctrl+maj+entrer) dans la colonne A. Dans ce dernier cas, tu n'auras pas le choix dans l'ordre des noms affichés, mais comme c'est plus simple, c'est plus pratique :).

@ plus
 

Pièces jointes

  • feuille-emargement-2018bis.xlsm
    45.2 KB · Affichages: 129
Dernière édition:

PERES

XLDnaute Nouveau
Bonjour

Une possibilité en pièce jointe. Cf. le nom liste évolutive défini dans le gestionnaire de noms. Mais tu peux aussi faire directement avec la formule matricielle à valider avec les 3 touches Ctrl+maj+entrer) dans la colonne A. Dans ce dernier cas, tu n'auras pas le choix dans l'ordre des noms affichés, mais comme c'est plus simple, c'est plus pratique :).

@ plus
Bonjour,

JE TE REMERCIE!!! C'est génial.

J'ai du supprimer quelques noms dans la première feuille sinon j'avais des doublons dans les listes déroulantes. Mais du coup la formule ne fonctionne plus. Ensuite, pourrais tu m'expliquer en quelques mots cette formule pour arriver au résultat? J'ai beau chercher je ne la comprends pas. Pourrais tu m'éclairer ?
Pour pouvoir l’expliquer lors de mon oral faudrait que j'arrive à la comprendre :/

Merci par avance!!!!!

Joyeuse fête de Paques.

Bien cordialement,

Anaïs
 

Pièces jointes

  • Copie de feuille-emargement-2018bis.xlsm
    44.7 KB · Affichages: 75

CISCO

XLDnaute Barbatruc
Bonjour

Il faut valider les deux formules,colonnes J et K, en matriciel, donc avec les 3 touches Ctrl+maj+entrer, et pas juste avec entrer. Si tu oublies de le faire, il faut sélectionner la cellule, cliquer dans la barre de formule, et appuyer sur les 3 touches. Cela fait apparaitre les accolades, { et }, devant et derrière.

Si tu veux voir ce que cela donne, cliques sur Formules, puis sur Evaluation de formule, puis suivant, et regarde les résultats intermédiaires présentés dans la fenêtre.

Dans la colonne J, tu avais oublié de valider en matriciel, donc la formule ne fonctionnait pas.

Quelques explications. Dans J7, tu as :
SI(LIGNES($1:1)>SOMME(1*(Liste!B$2:B$30=$G$4));"";INDEX(Liste!D$1: D$30;MIN(SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0);LIGNE($2:$26)))))
LIGNES($1:1) te renvoie 1, c.à-d. le nombre de lignes depuis le début des calculs.
SOMME(1*(Liste!B$2:B$30=$G$4)) te donne le nombre de cellules dans la feuille Liste dans la colonne B, contenant la même chose que le service contenu dans G4.
Cela ne fonctionne ainsi que parce qu’on a validé en matriciel. Si on ne le fait pas, Excel ne compare que B2 à G4, alors qu'il faut comparer B2, B3, B4, et ainsi de suite jusqu'à B30 à G4. Regardes bien la différence sur les deux images ci-dessous, la première sans validation, la seconde avec.
sansvalidationmatricielle.JPG
Avecvalidationmatricielle.JPG

ce qui donnent respectivement
sansvalidationmatriciellebis.JPG
Avecvalidationmatriciellebis.JPG

Le gros morceau...(Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0)
Dans Excel, on peut presque tout le temps remplacer le ET par un * (et le OU par un +), comme en automatisme, en logique, en...
(Liste!$B$2:$B$30=$G$4) renvoie VRAI si Bx contient la même chose que G4, FAUX dans le cas contraire. On a donc une série de VRAI et de FAUX, par ex {FAUX;FAUX;FAUX;VRAI;VRAI;VRAI;FAUX;FAUX;FAUX....}. Cela permet de ne garder que les lignes correspondant au service concerné.
NB.SI(J$6:J6;Liste!D$2: D$30) te renvoie le nombre de J6 dans la plage D$2: D$30. Donc, comme J6 = "", et qu'il ni y a pas de cellule vide dans la plage D$2: D$30, cela renvoie {0;0;0;0....} (D2 n'est pas égal à J6, D3 n'est pas égal à J6, et ainsi de suite).
(NB.SI(J$6:J6;Liste!D$2: D$30)=0) renvoie donc une série de VRAI
On a donc un produit du style {FAUX;FAUX;FAUX;VRAI;VRAI;VRAI;FAUX;FAUX;FAUX....} * {VRAI;VRAI;VRAI;VRAI...} = {0;0;0;1;1;1;0;0;0...} puisque VRAI*VRAI donne 1 alors que tous les produits contenant au moins un FAUX donne 0.
Avec SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0);LIGNE($2:$26)), chaque 1 reçoit le n° de la ligne correspondante.
MIN(SI(...;...)) renvoie le plus petit de ces n°.
INDEX(....; ...) renvoie le contenu de la ligne choisie dans la plage D1: D30.

Dans J8, on veut faire la mêm chose, en éliminant le nom déja cité dans J7. Donc, dans J8, on a presque la même équation :
=SI(LIGNES($1:2)>SOMME(1*(Liste!B$2:B$30=$G$4));"";INDEX(Liste!D$1: D$30;MIN(SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J7;Liste!D$2: D$30)=0);LIGNE($2:$26))))). Seules les parties en rouge sont différentes.
LIGNES($1:2) renvoie 2
NB.SI(J$6:J7;Liste!D$2: D$30) renvoie
NBSI.JPG

Cette fois, sur la dernière ligne ci-dessus, on a un 1 (qui correspond au contenu de J7 qui existe une fois dans la plage D2: D30) noyé au milieu des 0. Dans son cas, NB.SI (...) =0 va renvoyer une série de Vrai et un FAUX correspondant au nom déjà cité dans J7, donc le nom contenu dans J7 n'est plus accepté. Cela ne sera plus lui qui sera sur la ligne MIN choisie finalement.

Je te laisse "jouer" avec la fenêtre "Evaluation de formule" pour essayer de comprendre la suite. Si tu as du mal, essaye de te construire un exemple avec une plage plus petite que D2: D30 (La fenêtre "Evaluation de formule" est malheureusement souvent trop petite pour qu'on voit tous les résultats intermédiaires facilement. Il faut utiliser l’ascenseur à droite, et cela n'est pas très pratique, sauf si on a une mémoire gargantuesque).

Pour K7, c'est presque la même méthode, sauf que les noms éliminés ne se trouvent pas au-dessus, dans la colonne K, mais dans la plage D7: D15, la plage des noms déjà utilisés. PETITE.VALEUR permet de ne citer que le premier nom, puis, en dessous, le deuxième, et encore en dessous, le troisième et ainsi de suite.

@ plus
 
Dernière édition:

PERES

XLDnaute Nouveau
Bonjour

Il faut valider les deux formules,colonnes J et K, en matricielle, donc avec les 3 touches Ctrl+maj+entrer, et pas juste avec entrer. Si tu oublies de le faire, il faut sélectionner la cellule, cliquer dans la barre de formule, et appuyer sur les 3 touches. Cela fait apparaitre les accolades, { et }, devant et derrière.

Si tu veux voir ce que cela donne, cliques sur Formules, puis sur Evaluation de formule, puis suivant, et regarde les résultats intermédiaires présentés dans la fenêtre.

Dans la colonne J, tu avais oublié de valider en matriciel, donc la formule ne fonctionnait pas.

Quelques explications. Dans J7, tu as :
SI(LIGNES($1:1)>SOMME(1*(Liste!B$2:B$30=$G$4));"";INDEX(Liste!D$1: D$30;MIN(SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0);LIGNE($2:$26)))))
LIGNES($1:1) te renvoie 1, c.à-d. le nombre de lignes depuis le début des calculs.
SOMME(1*(Liste!B$2:B$30=$G$4)) te donne le nombre de cellules dans la feuille Liste dans la colonne B, contenant la même chose que le service contenu dans G4.
Cela ne fonctionne ainsi que parce qu’on a validé en matriciel. Si on ne le fait pas, Excel ne compare que B2 à G4, alors qu'il faut comparer B2, B3, B4, et ainsi de suite jusqu'à B30 à G4. Regardes bien la différence sur les deux images ci-dessous, la première sans validation, la seconde avec.
Regarde la pièce jointe 1009474 Regarde la pièce jointe 1009475
ce qui donnent respectivement
Regarde la pièce jointe 1009476 Regarde la pièce jointe 1009477
Le gros morceau...(Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0)
Dans Excel, on peut presque tout le temps remplacer le ET par un * (et le OU par un +), comme en automatisme, en logique, en...
(Liste!$B$2:$B$30=$G$4) renvoie VRAI si Bx contient la même chose que G4, FAUX dans le cas contraire. On a donc une série de VRAI et de FAUX, par ex {FAUX;FAUX;FAUX;VRAI;VRAI;VRAI;FAUX;FAUX;FAUX....}. Cela permet de ne garder que les lignes correspondant au service concerné.
NB.SI(J$6:J6;Liste!D$2: D$30) te renvoie le nombre de J6 dans la plage D$2: D$30. Donc, comme J6 = "", et qu'il ni y a pas de cellule vide dans la plage D$2: D$30, cela renvoie {0;0;0;0....} (D2 n'est pas égal à J6, D3 n'est pas égal à J6, et ainsi de suite).
(NB.SI(J$6:J6;Liste!D$2: D$30)=0) renvoie donc une série de VRAI
On a donc un produit du style {FAUX;FAUX;FAUX;VRAI;VRAI;VRAI;FAUX;FAUX;FAUX....} * {VRAI;VRAI;VRAI;VRAI...} = {0;0;0;1;1;1;0;0;0...} puisque VRAI*VRAI donne 1 alors que tous les produits contenant au moins un FAUX donne 0.
Avec SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J6;Liste!D$2: D$30)=0);LIGNE($2:$26)), chaque 1 reçoit le n° de la ligne correspondante.
MIN renvoie le plus petit de ces n°.
INDEX(....; ...) renvoie le contenu de la ligne choisie dans la plage D1: D30.

Dans J8, on veut faire la mêm chose, en éliminant le nom déja cité dans J7. Donc, dans J8, on a presque la même équation :
=SI(LIGNES($1:2)>SOMME(1*(Liste!B$2:B$30=$G$4));"";INDEX(Liste!D$1: D$30;MIN(SI((Liste!$B$2:$B$30=$G$4)*(NB.SI(J$6:J7;Liste!D$2: D$30)=0);LIGNE($2:$26))))). Seules les parties en rouge sont différentes.
LIGNES($1:2) renvoie 2
NB.SI(J$6:J7;Liste!D$2: D$30) renvoie
Regarde la pièce jointe 1009478
Cette fois, on a un 1 (qui correspond au contenu de J7 qui existe une fois dans la plage D2: D30) noyé au milieu des 0. Dans son cas, NB.SI (...) =0 va renvoyer une série de Vrai et un FAUX correspondant au nom déja cité dans J7, donc le nom contenu dans J7 n'est plus accepté. Cela ne sera plus lui qui sera sur la ligne MIN choisie finalement.

Je te laisse "jouer" avec la fenêtre "Evaluation de formule" pour essayer de comprendre la suite. Si tu as du mal, essaye de te construire un exemple avec une plage plus petite que D2: D30 (La fenêtre "Evaluation de formule" est malheureusement souvent trop petite pour qu'on voit tous les résultats intermédiaires facilement. Il faut utiliser l’ascenseur à droite, et cela n'est pas très pratique, sauf si on a une mémoire gargantuesque).

Pour K7, c'est presque la même méthode, sauf que les noms éliminés ne se trouvent pas au-dessus, dans la colonne K, mais dans la plage D7: D15, la plage des noms déjà utilisés. PETITE.VALEUR permet de ne citer que le premier nom, puis, en dessous, le deuxième, et encore en dessous, le troisième et ainsi de suite.

@ plus


Bonsoir,

Alors tout d'abord MERCI BEAUCOUP pour toutes ces explications et d'avoir pris le temps de tout détailler. C'est vraiment super gentil.
J'ai compris une partie de tes explications mais je dois avouer que ce n'est pas facile d'autant plus quand c'est nouveau...

Quand je regarde cette feuille d'émargement avec toutes ces formules je me demande s'il n'est pas possible de la simplifier ?
Je m'explique:
N'est-il pas possible de mettre directement le nom des salariés du service concerné (G4) dans les cellules D7 à D15 ? La liste déroulante ne serait donc plus nécessaire.
--> Je souhaiterai juste qu'en fonction du service sélectionné le nom des salariés apparaissent dans toutes les cellules directement (D7 à D15)

Merci encore pour ton aide!! C'est vraiment appréciable!!!

Excellente soirée à toi,

Cordialement,
 

CISCO

XLDnaute Barbatruc
Bonjour

Bonsoir,
....
Je m'explique:
N'est-il pas possible de mettre directement le nom des salariés du service concerné (G4) dans les cellules D7 à D15 ? La liste déroulante ne serait donc plus nécessaire.
...
Cordialement,

Bien sûr que c'est possible, et c'est pour cela que je t'ai proposé une seconde solution dans la colonne A (Solution que tu as transférée en colonne J). Il suffit de mettre ces formules dans la colonnes B... après les avoir comprises.

@ plus
 
Dernière édition:

PERES

XLDnaute Nouveau
Bonjour



Bien sûr que c'est possible, et c'est pour cela que je 'ai proposé une seconde solution dans la colonne A (Solution que tu as transférée en colonne J). Il suffit de mettre ces formules dans la colonnes B... après les avoir comprises.

@ plus

Bonjour,

PARFAIT! Il m'aura fallu du temps mais j'ai compris!! (ENFIN)

Merci beaucoup de ton aide!!!

Bien cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16