rss
[Excel] Liste déroulante de longueur variable
par thibane
 Fil de Discussions
Statut : Non résolu
mercredi 5 juillet 2006 à 11:11:14
Bonjour.
Je travaille sous WXP, version 2002 d'excel.
Voila mon problème.

J'ai une liste de nom qui peut etre modifiée par ajout.
Je voudrais donc une liste déroulante qui sélectionne cette liste.

J'utilise donc Données>Validation>Autoriser Liste et dans la Source, je mets ma liste que je fais déborder volontairement au cas ou il y aurait un ajout.
Le problème que j'ai est que toutes les cellules vides sélectionnées en trop apparaissent dans la liste déroulante. Moi je voudrais que seules les cellules non vides apparaissent.

Vala, je pense avoir été clair... ;)
Répondre à thibane  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mercredi 5 juillet 2006 à 13:47:48 Fil de Discussions
Bonjour thibane,

Tu peux encadrer la liste par une marque de début et une marque de fin. Exemple :
____DEB
tata
tete
titi
tutu
tyty
____FIN
Tu donnes un nom à ta liste(Maliste par exemple), et tu indiques =Maliste dans la validation de données.

Inconvénient (?) : les marques de début/fin apparaissent dans la liste déroulante.
Avantage : tu peux ajouter ou supprimer de nouvelles valeurs n'importe où sans rien changer.

Tu peux aussi ne pas mettre les marques si elles te gênent. Dans ce cas, il faut seulement prendre des précautions pour un ajout en tête et en queue de liste.
- pour ajouter en tête : copier la ligne de tête, et insérer la copie derrière. Ensuite on utilise la ligne de tête pour mettre la nouvelle entrée.
- pour ajouter en queue : copier la ligne de fin, et insérer la copie devant. Ensuite on utilise la ligne de fin pour mettre la nouvelle entrée.
Répondre à Armojax

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par thibane, le mercredi 5 juillet 2006 à 14:21:08 Fil de Discussions
Merci pour ta réponse Arjomax.
Cependant, j'ajoute quelques précisions concernant le fait de ne pas mettre de marques.

Pour simplifier, la feuille 1 contient dans la premiere colonne une liste de noms.

Cette liste est modifiable par l'utilisateur : il peut ajouter un nom et les données sont triées par ordre alphabétique.

Cette liste est recopiée dans la feuille 2 (où doit se trouver ma liste déroulante) pour me simplifier. Et donc la liste déroulante va chercher dans cette liste de nom recopiés.

Donc dans tous les cas, la longueur de la liste source est "modifiée par le bas", la cellule supérieure restant fixe. Je ne sais pas si je suis clair là... Donc pas d'ajout en tete...

PS: en tout cas, l'histoire des marques fonctionnent, merci bcp!
il faut juste que je rajoute un peu de code pour trouver l'endroit où rajouter "FIN" mais c'est pas compliqué.
Répondre à thibane

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mercredi 5 juillet 2006 à 15:28:08 Fil de Discussions
Re,

Pour le fun, je te propose le petit code ci-dessous...

- La liste saisie par les utilisateurs se trouve dans la colonne 1 de Feuil1.
- La liste triée tirée de la saisie se trouve en colonne 1 de Feuil2.
- Je nomme Liste cette liste triée, utilisée pour la validation des données.

Dans le code VBA de la feuille Feuil2, je mets ce code :
Private Sub Worksheet_Activate()
  
  Dim DerLig As Long
    
  Application.ScreenUpdating = False
  
  Sheets("Feuil1").Columns(1).Cells.Copy
  Cells(1, 1).Select
  ActiveSheet.Paste
  On Error Resume Next
  ActiveWorkbook.Names("Liste").Delete
  On Error GoTo 0
  DerLig = Columns(1).End(xlDown).Row
  Range(Cells(1, 1), Cells(DerLig, 1)).Sort Key1:=Range(Cells(1, 1), Cells(1, 1)), Order1:=xlAscending
  Range(Cells(1, 1), Cells(1, 1)).Select
  
  ActiveWorkbook.Names.Add Name:="Liste", RefersToR1C1:="=R1C1:R" & DerLig & "C1"
  
  Application.ScreenUpdating = True

End Sub
A chaque fois qu'on va sur la feuille Feuil2, la macro s'exécute automatiquement :
- copie de la liste saisie
- tri alpha
- recalcul de la plage nommée Liste.

Regarde si ça te convient...
Répondre à Armojax

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par thibane, le mercredi 5 juillet 2006 à 15:37:46 Fil de Discussions
C'est ce qu'il me fallait merci.
Par contre, dans ton code, je ne vois "Feuill2" nulle part.. Ou est-ce qu'il y a changement de page??
Répondre à thibane

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mercredi 5 juillet 2006 à 15:40:08 Fil de Discussions
Ce code se trouvant dans le code VBA de Feuil2, et s'exécutant quand Feuil2 est activée, toutes les plages nommées sans précision se rapportent à cette feuille.
Répondre à Armojax

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par thibane, le mercredi 5 juillet 2006 à 15:47:41 Fil de Discussions
Merci pour cette précision.
Allez derniere question apres je t'embete plus ;)

Si tu veux ne copier la colonne 1 de la feuille 1 qu'à partir de la 3eme ligne, ca change quoi dans le code...?
Répondre à thibane

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Armojax, le mercredi 5 juillet 2006 à 16:29:25 Fil de Discussions
Voici le code.
Tu peux aussi essayer la solution de G.David ci-dessous...
Private Sub Worksheet_Activate()
  
  Dim DerLig As Long
    
  Application.ScreenUpdating = False
  
  DerLig = Sheets("Feuil1").Columns(1).End(xlDown).Row
  Columns(1).Cells.ClearContents
  Sheets("Feuil1").Range("A3:A" & DerLig).Copy
  Cells(1, 1).Select
  ActiveSheet.Paste
  On Error Resume Next
  ActiveWorkbook.Names("Liste").Delete
  On Error GoTo 0
  Range(Cells(1, 1), Cells(DerLig - 2, 1)).Sort Key1:=Range(Cells(1, 1), Cells(1, 1)), Order1:=xlAscending
  Range(Cells(1, 1), Cells(1, 1)).Select
  
  ActiveWorkbook.Names.Add Name:="Liste", RefersToR1C1:="=R1C1:R" & DerLig - 2 & "C1"
  
  Application.ScreenUpdating = True

End Sub
Répondre à Armojax

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par G.David, le mercredi 5 juillet 2006 à 16:04:18 Fil de Discussions
essayes ceci dans ta validation de liste
=INDIRECT(CONCATENER("i1:i";NBVAL(I:I)))

cette formule suppose que les données sont mise dans la colonne i
Cordialement
G.David le respect n'est pas un dû
il se merite
Répondre à G.David

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par thibane, le jeudi 6 juillet 2006 à 10:50:45 Fil de Discussions
Entièrement satisfait. Merci à vous!
Répondre à thibane

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par nafuser, le dimanche 11 mai 2008 à 20:28:13 Fil de Discussions
une autre solution pourra aussi faire l'affaire
en définissant la variable ma_liste sur une zone de cellule selon la taille souhaité exp [A8:A200]

la formule suivante dans l'onglet validation permet de faire apparaitre la zone [A8:A200] en tant que liste déroulante tout en supprimant les blancs de la fin [du dernier champs non vide jusqu'au champ A200].

[=DECALER(ma_liste;0;0;NBval(ma_liste))]

si saturation et besoin y a d'agrandir la taille. Redéfinir la variable ma_liste sur une zone plus grande.
une solution générique consiste à utiliser toute la colonne .
définir ma_liste sur [A:A]
Répondre à nafuser

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par , le mercredi 28 mai 2008 à 15:30:02 Fil de Discussions
Bonjour,

Je suis moi aussi confronté à un petit souci.

J'ai deux liste sur 2 feuilles différentes, une avec les coordonées de 150 personnes, et l'autre avec des informations relative à leur travail. Ce que je cherche c'est faire une liste déroulante sur chaque nom, sur la deuxième feuille afin de ne pas toujours aller chercher les informations sur l'autre feuille.

Je ne sait pas si j'ai été assez claire.

Si vous pouviez m'aider.

Merci
Répondre à M£

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par , le mercredi 28 mai 2008 à 15:44:20 Fil de Discussions 
?
Répondre à M£
Discussions pertinentes trouvées dans le forum
02/05 22h14liste de longueur variable sous ExcelLogiciels/Pilotes07/05 19h551
19/10 12h04[VBA excel] liste deroulante a nom variableProgrammation26/10 02h1413
18/06 16h59EXCEL liste déroulante selon une autreBureautique19/06 15h2610
16/06 10h56[Excel] liste déroulanteBureautique16/06 13h564
Plus de discussions sur « [Excel] Liste déroulante de longueur variable » Discussion en cours Discussion fermée Problème résolu
Logiciels pertinents trouvés dans les téléchargements
Télécharger Ma Liste d'Achats  2.01Ma Liste d'Achats - Faire les courses est une tâche bien compliquée pour les non initiés. Ma liste d'achats est comme son nom l'indique, un...Catégorie: Environnement de travail
Licence: Freeware/gratuit
Télécharger SpaceTime   1.0SpaceTime - Pour plus de fluidité et d'ergonomie dans vos recherches sur le web, en mode interactif, c'est encore mieux. Space Time est...Catégorie: Internet
Licence: Freeware/gratuit
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger TMPGEnc 2.521TMPGEnc - TMPGEnc est un encodeur, c'est-à-dire qu'il convertit un fichier vidéo, en général de type AVI en fichier de type MPEG ...Catégorie: Copie/Extraction
Licence: Open Source
Plus de logiciels gratuits sur « [Excel] Liste déroulante de longueur variable »
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide