XL 2013 Liste déroulante spécifique

mont25

XLDnaute Nouveau
Bonjour,

J'aurais besoin d'aide pour une liste déroulante. Je vous explique, je voudrai une liste déroulante dont la valeur qui a été sélectionnée disparaît de la liste, en regardant avant de poster j'ai trouver une formule " SI +NBSI " qui fonctionne parfaitement, la valeur disparaît de la liste, mais cela me laisse des blancs par exemple "lundi, blanc, mardi, mercredi, blanc......). J'aimerai que les blancs disparaissent et également qu'une fois que tous les éléments ont été sélectionnés, que ma liste recommence au début. Il y a t'il une formule spécifique ? dans quelle mesure je peux l'intégrer à ma formule "SI+NBSI" !

Je remercie beaucoup ceux qui pourront m'aider. Si vous avez besoin de fichier, je vous le communiquerai avec plaisir.
dsl si ce type d'aide à déjà été posté
Cordialement.
 

Victor21

XLDnaute Barbatruc
Re,

Relisez ma remarque du post 8.
Il est probable que ce soit plus simple pour moi. Surtout le jour où vous vous retrouverez seul devant un plantage, ou une demande de modification.
Si vous désirez absolument utiliser l'exemple, avec les risques déjà évoqués, reprenez celui-ci, et changez les noms (Item1 par Bardoux...) en A1:A13.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Euhhhh, oui, et en française ça donne quoi
La plage devant recevoir la formule doit être sélectionnée intégralement, et le curseur texte doit être positionné dans la barre de formule. Pendant que vous maintenez enfoncés simultanément les touches Ctrl et majuscule temporaire, appuyez sur la touche Entrée. Des accolades encadrant la formule signaleront dans la barre de formule que celle ci aura été validée de façon matricielle et non pas ordinaire.
 

Victor21

XLDnaute Barbatruc
Re,

Le problème c'est que j'essai de le transposer sur mon tableau et cela fonctionne 1fois sur 3. C'est pour ça, que j'aurais voulu comprendre les formules, au lieux de les appliquer bêtement.
Pour ce faire vous disposez d'un outil : volet "Formules", groupe "Vérification des formules", outil : "Evaluer la formule" qui vous permet, après avoir sélectionné la cellule contenant une formule, de voir le déroulement de ce calcul pas-à-pas.
 

Si...

XLDnaute Barbatruc
Re
Ton tableau SI.... c'est exactement ce que je recherche, sauf que, les noms s'effacent en utilisant ton userform ?

C'est le cas d'une liste de validation. Les listes doivent être dans la feuille d'appel.

En voici une adaptation accompagnée d'une autre proposition (avec une liste ActveX).
 

Pièces jointes

  • Liste Validation dégressive.xlsm
    39.2 KB · Affichages: 19
  • Liste dégressive(ActiveX).xlsm
    45.7 KB · Affichages: 18

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Un essai via macro. On exécute la macro chaque fois qu'on change de sélection dans le tableau où saisir les noms.

La macro gère les listes de validation par paquets de 12 cellules consécutives (lignes 3 à 14 puis lignes 15 à 26 et enfin lignes 27 à 31). Le 12 est le nombre de cellules de la liste de choix.

Le choix de procéder par paquet de douze cellules consécutives est peut-être une interprétation abusive de ma part. Si c'est le cas, m'en informer. Je modifierai le code en conséquence.

Le code de la macro se trouve dans le module de code de la feuille "Feuil1". Il y a deux constantes à initialiser:
  1. plageB qui est la plage de saisie (ici initialisée à "B3:B31")
  2. PlageListe qui est la plage de la liste de choix (ici initialisée à = "F3:F14")
Si pour un paquet de 12 cellules, il n'y a pas de liste de validation, c'est que les douze noms de la liste de choix ont été utilisés. Pour faire réapparaître une liste de validation, il suffit d'effacer une ou plusieurs cellules du paquet et permettre ainsi des modifications.


Le code :
VB:
Const plageB = "B3:B31"
Const PlageListe = "F3:F14"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim dico, xcell, ycell, n1&, n2&, i

If Intersect(Target, Range(plageB)) Is Nothing Then Exit Sub

n1 = Range(plageB).Row: n2 = n1 + Range(PlageListe).Count - 1
If n2 > Range(plageB).Row + Range(plageB).Rows.Count - 1 Then n2 = Range(plageB).Row + Range(plageB).Rows.Count - 1
Do
   Set dico = CreateObject("scripting.dictionary")
   For Each ycell In Range(PlageListe): dico(CStr(ycell.Value)) = "": Next ycell
   For i = n1 To n2
      If dico.exists(CStr(Cells(i, "b"))) Then dico.Remove (CStr(Cells(i, "b")))
   Next i
   For i = n1 To n2
      Cells(i, "b").Validation.Delete
      If dico.Count > 0 Then
         Cells(i, "b").Validation.Add Type:=xlValidateList, Formula1:=Join(dico.Keys, ",")
      End If
   Next i
   n1 = n1 + Range(PlageListe).Count: n2 = n2 + Range(PlageListe).Count
   If n1 > Range(plageB).Row + Range(plageB).Rows.Count - 1 Then Exit Do
   If n2 > Range(plageB).Row + Range(plageB).Rows.Count - 1 Then n2 = Range(plageB).Row + Range(plageB).Rows.Count - 1
Loop
End Sub
 

Pièces jointes

  • mont25-Essai liste deroulante- v1.xls
    43 KB · Affichages: 15
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,
Le choix de procéder par paquet de douze cellules consécutives est peut-être une interprétation abusive de ma part. Si c'est le cas, m'en informer. Je modifierai le code en conséquence.

Je me réponds... Oui! C'est abusif.

Un essai qui abandonne la notion de paquet et prend en compte tout le tableau de saisie.
 

Pièces jointes

  • mont25-Essai liste deroulante- v2.xls
    47.5 KB · Affichages: 21

fredd

XLDnaute Occasionnel
Bon_jour



D'accord avec l'observation de Victor 21 :)*

Tout dépend de ton contexte. Si tu veux inscrire tous les noms (dans le désordre ou pas) avant de recommencer voici un exemple (VBA) .
Même si j'utilise l'outil Tableau, toute personne, un tant soit peu à l'aise avec le VBA, peut s comprendre et adapter ces 2 macros.

Je suis impressionné par cette macro ...
J'utilise la fonction rouge si en double dans les menu déroulant. Jamais j'aurais pus imaginer qu'il suffisais simplement de l'enlever de la liste pour ne pas à avoir à le re sélectionner.
Bravo et merci.
 

Discussions similaires

Réponses
2
Affichages
266

Statistiques des forums

Discussions
312 101
Messages
2 085 297
Membres
102 855
dernier inscrit
creed