Voir aussi
Données de liste venant d'un autre classeur
Comment construire une liste de validation à partir de données présentes dans un autre classeur ?
Ecrire la liste sur le classeur1 dans la feuille1 par exemple toto, titi, tata sur les cellules de A1 à A3.

Donner un nom (par exemple MaListe) à cette liste : insertion/nom/définir MaListe.

Aller sur le classeur2 et faire Insertion/définir un nom. Taper Noms1 dans la zone de noms et écrire en toutes lettres dans la fenêtre de formule en bas RefEdit =Classeur1!MaListe.

Puis aller dans la cellule devant recevoir la validation et faire
Données/validation/Autoriser/Liste
Dans Source, écrire =Noms1.
Attention: pour que ca puisse marcher, il faut que le fichier Classeur1 soit ouvert.
AnonymousA,
Ajouté ou modifié le 16/03/2008 (N°1982)
Intercepter le changement de valeur d'une cellule via une liste de validation.
Comment déclencher une macro lorsque la valeur d'une cellule change, sachant que ce changement se fait par l'intermédiaire d'une liste de validation ?
Petite difficulté avec la validation de liste :
quand on modifie une cellule par validation de liste, l'événement
Worksheet_Change n'est pas activé
une méthode un peu tordue est d'utiliser un onglet masqué dans lequel on écrit
=B5 (si B5 est la cellule modifiée par validation de liste)
et utiliser l'événement Private Sub Worksheet_Calculate() de la nouvelle
feuille pour détecter le changement de B5.
Jacques Chaussard,
Ajouté ou modifié le 16/05/2004 (N°1399)
Listes se mettant à jour automatiquement
J'ai une liste dont les données sources sont dans une colonne. Comment faire pour que tout ajout dans cette colonne se répercute dans ma liste ?
Il faut que tu nommes ta plage de données sources avec la fonction décaler (tu trouveras
de l'aide sur cette fonction dans le lexique et sur la page formules).
Si par exemple tes données sont sur la page "codes" dans la colonne A avec en A1 le titre
de ta liste (qui ne doit pas apparaitre dans les éléments de ta liste), et les différents éléments
à inclure en A2:A20, sélectionne A2, puis menu Insertion/nom/définir. Choisis un nom pour ta
liste, disons "maliste" et dans la zone en bas tu écris :
=decaler($A2;;;nbval($A:$A)-1) puis tu cliques sur ajouter. Si tu recliques dans la formule en bas,
tu verras que dans ton classeur toutes les données entre A2 et A20 sont entourées d'un pointillé.
Tu vas maintenant utiliser le nom "maliste" comme source de données. Tu peux par exemple
dans une une liste de validation (menu données/validation), mettre comme source de
données "=maliste" (sans les guillemets). Toutes les données que tu ajouteras sur la page codes
en dessous des valeurs précédentes seront automatiquement ajoutées à ta liste de choix.
De même tu peux utiliser cette astuce dans un formulaire (userform) pour alimenter une listbox.

Dans le userform_initialize (ou ailleurs suivant tes besoins), tu écris

malistbox.rowsource=("codes!maliste")
(respecte la ponctuation)
L'intérêt c'est qu'une fois ceci défini, tu n'as plus à modifier ton code si tu ajoutes des éléments.
Là encore tout ajout de données (ou supression d'une cellule) se répercute tout seul dans ton userform.
Attention ! il ne faut absolument pas :
- Avoir de trous dans ta liste (donc pas d'effecement de valeurs, il faut supprimer et décaler
les cellules vers le haut)
- Ajouter d'autres choses dans la colonne A. Ou alors il faut ajuster la formule de décaler en
enlevant le nombre de cellules à ne pas prendre en compte.
Flo Cabon,
Ajouté ou modifié le 15/05/2004 (N°1382)
Titre pour une liste
Comment faire apparaître un titre pour une liste sur un userform ?
Lorsque l'on définit une RowSource dans un listbox, la mise à True de
ColumnsHeads provoque l'affichage d'un titre dont la valeur est celle de la
cellule positionnée une ligne avant la première cellule du tableau.

Ainsi RowSource = A1:B4 renvoie en titres de colonnes "Colonne A" et
"Colonne B"
RowSource = A2:B5 renvoie en titres les valeurs de A1 et de B1
Tom Ogilvy, (N°1056)
Créer une liste secondaire
Comment permettre à des utilisateurs de créer une sous liste à partir d'une liste principale ?
Dans ce classeur à télécharger,
tu verras un exemple permettant d'ajouter ou de
retrancher des éléments sélectionnés à une liste secondaire.

Cette astuce est illustrée dans ce classeur exemple :
jw-itemtransfer (téléchargé 10752 fois)
John Walkenbach, (N°1055)
Utiliser une liste pour récupérer plusieurs données
J'ai un tableau composé de trois colonnes : Référence, produit, prix unitaire. Je voudrais faire une liste des produits et récupérer alors toutes les données correspondant à celui-ci.
En supposant que tes colonnes soient nommées "Référence", "Produit",
"Prix_unitaire".
Pour la liste déroulante, sélectionne la cellule concernée (ex : A10) et fais Données ->
Validation -> Autoriser Liste et dans la zone Source, tu fais référence à ta plage
"Produit".

Pour la formule qui doit t'afficher ta référence, étant donné la disposition
de tes colonnes, tu pourras pas t'en tirer avec RECHERCHEV. Passe plutôt
par INDEX+EQUIV :

=INDEX(Référence;EQUIV(A10;Produit;0))
et idem pour le prix unitaire.
Bernard Mazas, (N°1054)
Raccourci clavier pour dérouler une liste de choix
Comment dérouler une liste avec un raccourci clavier ?
Combinaison des Touches : Alt & Down

Et pour aller plus vite dans ta sélection si ta liste est longue, tu peux inclure une
macro que tu trouveras dans le classeur de Starwing.

Cette astuce est illustrée dans ces classeurs exemples :
st-selectionner (téléchargé 4943 fois)
gd-recherchevindexequiv (téléchargé 20284 fois)
Stéphane Royer, Starwing,
Ajouté ou modifié le 17/04/2005 (N°1053)
Remplir une cellule avec plusieurs éléments d'une liste
J'ai une liste de choix sur une page. Je voudrais sélectionner plusieurs noms sur cette liste et les rentrer dans une seule cellule, séparés par une virgule.
Tu peux utiliser une zone de liste en VBA et lui associant la macro :

Private Sub ListBox1_Change()
Cells(1) = Cells(1) & "," & ListBox1.Text
End Sub

chaque fois que tu vas cliquer sur un élément de la liste il sera ajouté à la cellule 1, séparé
de ce que la cellule contenait avant par une virgule
Jacques Chaussard, (N°1052)
Mise à jour de liste déroulante
Comment faire pour créer une liste déroulante qui se mette à jour automatiquement ?
Voici une façon simple de construire une liste déroulante et de faire sa mise à
jour.

A) Quelque part dans ta feuille où sera mise la liste déroulante,
Inscrit un item de ta liste par cellule contigue(important). Pour les besoins de
la simplicité ici, assure-toi, que les cellule autour de ta liste sont vides....

B) À partir de la barre d'outils Contrôles(pas Formulaires) crée une liste
déroulante sur ta feuille.

C) En mode création, double-clique sur le contrôle de liste déroulante.

D) Choisi dans la liste déroulante de droite de la
fenêtre de l'éditeur VBA, l'événement "GotFocus"

Voici ce que ça donne:

Private Sub ComboBox1_GotFocus()

Dim Adresse As String
Adresse = Sheets("Feuil1").Range("A1").CurrentRegion.Address
ComboBox1.ListFillRange = Adresse

End Sub

Dans le code précédent remplace A1 par l'adresse de la cellule de ta
première valeur de la liste des items de la liste déroulante.

Voilà, le tour est joué. A chaque fois que tu cliqueras sur ta liste
déroulante, le code s'exécutera et ta liste sera toujours à jour.

Il y a plusieurs façon d'initialiser une liste déroulante, et plusieurs événements
peuvent être utilisé pour la mise à jour de ses items. Disons que celle-ci à
l'avantage d'être rapide et simple à mettre en branle...
Laurent Longre, (N°1051)
Listbox à contenu variable
Je voudrais remplir une listbox avec des valeurs de 1 à 52 si l'on a cliqué sur un bouton semaines ou avec des valeurs 1à 12 si on clique sur un bouton mois.
Avec sur une feuille la ListBox et 2 boutons options
Dans le module de la feuille :

Private Sub OptionButton1_Click() 'les semaines
ListBox1.Clear
For x = 1 To 52
ListBox1.AddItem ("Semaine " & x)
Next
End Sub

Private Sub OptionButton2_Click() 'les mois
ListBox1.Clear
For x = 1 To 12
ListBox1.AddItem (Format(DateSerial(0, x, 1), "mmmm"))
Next
End Sub
Alain Vallon, (N°1050)
Une liste qui s'use quand on s'en sert
Je souhaiterais obtenir dans une feuille excel, un menu déroulant avec la liste des disque dur, dans une autre liste, l'arborescence des fichiers. J'ai une liste de 120 personnes que je dois mettre sur une feuille excel tous les jours. Je voudrais les placer sur cette feuille à l'aide d'un userform et qu'ils disparaissent au fur et à mesure de la liste.
on assure la compatibilité excel 97 feuille modal
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "user32" _
(ByVal hWnd As Long, ByVal fEnable As Long) As Long

Private Sub UserForm_Initialize()
For Each c In Range("nom").Cells
ListBox1.AddItem (c.Value)
TextBox1.Value = ListBox1.ListCount
Next
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell.Value = ListBox1.Value
ListBox1.RemoveItem (Index)
TextBox1.Value = ListBox1.ListCount
End Sub
Philippe Bronchart,
Ajouté ou modifié le 25/10/2003 (N°1049)
Choix d'images avec une liste
Je voudrais utiliser une liste pour choisir une image dans mon classeur.
Voici un classeur à télécharger
qui te permet de faire cela soit avec une liste de validation soit avec une liste déroulante.

Cette astuce est illustrée dans ce classeur exemple :
av-listeimages (téléchargé 10309 fois)
Alain Vallon, (N°1048)
Listbox alimenté avec une extraction sans doublon
Je voudrais alimenter un listbox avec des noms contenu dans une colonne. Il y a des noms répétés et je n'en veux qu'un exemplaire. De plus il y a dans cette colonne le mot \\\"utilisateur\\\" que je ne dois pas prendre en compte.
Cette routine, qui ignore les cellules vides et les valeurs
d'erreur utilise l'objet Dictionnary de l'environnement des scripts.

Private Sub UserForm_Initialize()
Dim Table As Scripting.Dictionary
Dim i&, j&, Valide As Boolean, A As Variant

Set Table = New Scripting.Dictionary
j = 0

With Sheets("toto") ' À adapter
For Each A In .Range("B2:B" & .Range("A1").End(xlDown).Row)

'Vérifie si le nom n'est pas une erreur, n'est pas vide
'n'a pas déjà été récupéré, ne contient pas "utilisateur"
Valide = True
If IsError(A) Then
Valide = False ' on n'y met pas les valeurs d'erreur
ElseIf Len(A) = 0 Then
Valide = False
ElseIf Table.Exists(A.Value) Then
Valide = False
Else ' test spécial
If InStr(LCase(A), "utilisateur") > 0 Then Valide = False
End If

If Valide Then Table.Add A.Value, j: j = j + 1 'rajoute
Next
End With

For i = 0 To Table.Count - 1
Debug.Print Table.Keys(i)
ListBox1.AddItem (Table.Keys(i))
Next i
Set Table = Nothing ' Nettoyage
End

Atention, si tu rencontres une erreur au moment de l'exécution du code et que celui-ci
s'arrête sur Dim Table as Scripting.Dictionary, dans la
Fenêtre VBE(visual basic editor) / barre des menus / outils / références /
vérifie bien que
"Microsoft scripting Runtime" est coché
Clément Marcotte, Daniel Maher,
Ajouté ou modifié le 11/11/2004 (N°1047)
Remplir manuellement une liste multicolonnes
Comment puis-je faire pour remplir manuellement une liste multicolonnes ?
Plusieurs possibilités :
Remplir les articles (items) un par un avec la méthode
AddItem de la ListBox
ListBox1.AddItem "Mon i'aime à moi"

ou bien
Remplir un tableau avec la propriété List de la ListBox
dim tableau(3,2) as string
'pour 4 lignes et 3 colonnes car un tableau débute à l'indice 0!

tableau (0,0) = "ligne 1 colonne 1)
....

tableau(3,2) = "ligne 4 colonne 3"
ListBox1.ColumnCount = 3

ListBox1.List()=tableau
Pascal Engelmajer, Sharantyr, (N°1046)
Accéder aux feuilles d'un classeur avec une liste
Sur un classeur excel, j'ai environ une vingtaine de feuilles. Je désire mettre sur ma première feuille une zone de liste modifiable permettant de sélectionner une feuille de la liste.
Je te propose une combobox intégrée dans la barre d'outils "Mise en forme"
qui affiche en permanence la liste (triée) des feuilles du classeur actif. Un
clic sur le nom d'une feuille dans la liste la rend active :


http://perso.wanadoo.fr/frederic.sigonneau/code/ToutFait/FeuillesClasseurs.zip

(macro complémentaire)
Frédéric Sigonneau, (N°1045)
Les listes de choix : définition, différences, usage
Je souhaiterais savoir à quoi servent les listes de choix et si on peut les configurer ou les programmer
Il y a en gros 2 façons de travailler avec des listes déroulantes.

On peut les affecter à une cellule ou les utiliser dans une boîte de
dialogue en VBA. Dans chaque cas, on peut décider de permettre, ou non,
d'ajouter des éléments qui ne seraient pas déjà inscrits.

Dans une feuille de calcul, on peut associer la liste déroulante à une
cellule. En utilisant la barre d'outils "Commande", les éléments peuvent
être manipulés à partir de VBA. Ces mêmes éléments, en partant de la barre
d'outils "Formulaire" ne sont pas accessibles par VBA.

Pour faire une boîte de dialogue dans l'éditeur VBA, et l'utiliser
dans une procédure, il suffit d'insérer un "UserForm" . Sur cet UserForm, il
suffit de faire glisser le contrôle ListBox de la boîte à outils, sur
l'UserForm. Chaque contrôle a ses propres propriétés (Fenêtre Propriétés). On peut
(doit) aussi lui assigner du code VBA pour le faire réagir selon nos
besoins. Pour accéder à la fenêtre de code du contrôle (ListBox ou autre) ,
Il suffit de faire un clic droit sur le contrôle et de faire afficher le
code. Dans ce cas, il sera possible de voir la liste des événements gérés
dans la liste déroulante de droite, à la condition que la liste déroulante
de gauche point sur autre chose que général.
Clément Marcotte, (N°1044)
Liste de choix ou de validation venant d'une autre feuille
Est-il possible d'insérer dans une cellule une liste de choix qui proviendrait d'une autre feuille excel, d'un autre classeur excel voire d'une requête access ?
Si la liste est dans la colonne "A" de la Feuil2
il faut nommer cette plage de données sur la feuille Feuil2 avec:
Insertion -> Nom -> Définir, (MaListe)
=DECALER(Feuil2 !$A$1:$A$1;;;NBVAL(Feuil2 !$A:$A))
sur une autre feuille sélectionne une cellule et fait données, Validation,
Autoriser: Liste , Données:
=MaListe
que les données de la feuille "Feuil2" proviennent d'une requête sur access
ou qu'elles soient entrées à la mimine ne change rien.

========================
Pour faire référence à une liste nommée se trouvant dans un classeur
différent : Créer d'abord la liste nommée LaListe dans une feuille du fichier Source.xls

Dans l'autre classeur, créer un nom ListeExterne par Insertion Nom Définir
faisant référence à Source.xls!LaListe (à écrire en bas de la boîte Définir un nom).

Ensuite, dans Données Validation, il suffit de donner =ListeExterne comme
source des éléments de la liste de validation.

Le fichier Source doit cependant être ouvert pour pouvoir choisir dans la
liste de validation. Il est bien mentionné dans la liste des fichiers de
Edition Liaisons comme une source de données externes.
Isabelle, Catherine et Sainte Zaza, (N°1043)
Commentaires visibles dans une liste
Dans une cellule Données>Validation>Liste... Est-il possible de faire en sorte que les commentaires des cellules 'sources' apparaissent quand on sélectionne un item dans la liste déroulante ?
En supposant :
* Une plage nommée "List" quelque part dans le classeur et comprenant (ou pas)
des annotations
* Ta liste de validation en A1 de "Feuil1"

Dans le module de "Feuil1" :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
x = Application.[List].Find(Target.Value).Address
With Target
.ClearComments
.AddComment
On Error Resume Next
.Comment.Text Text:=Range(x).Comment.Text
If Err.Number = 91 Then .ClearComments
.Comment.Shape.TextFrame.AutoSize = True
End With
End Sub
Alain Vallon, (N°1042)
Formater le résultat d'une liste à choix multiples
J'ai une liste déroulante à choix multiples. Comment faire pour que le résultat des choix s'affiche a/c/E (avec les /)?
Dim s
s = ComboBox1.ListIndex
[A1] = ComboBox1.List(s, 0) & " / " & _
ComboBox1.List(s, 1) & " / " & _
ComboBox1.List(s, 2)

'la variable "s" est mise pour récupérer le numéro d'index de la sélection fait
dans la liste déroulante
et le numéro de la première colonne est 0
isabelle, (N°1041)
Listes en cascade
Je voudrais relier des listes entre elles : le choix d'un item dans la première détermine les items apparaissant dans la seconde.
Tu peux télécharger ce classeur de démonstration

Cette astuce est illustrée dans ce classeur exemple :
av-listevalidmultiples (téléchargé 28943 fois)
Alain Vallon, (N°1040)
Alignements dans une listbox/listview
Est-il possible de présenter les colonnes d'une listbox différemment les unes des autres. par exemple : j'ai quatre colonnes (dans une seule listbox), je souhaiterais que la première colonne soit alignée à gauche mais que les autres soient alignées à droite.
C'est possible à partir d'Excel 2000 avec le contrôle ListView
Patrick Penet, (N°1039)