OVH Cloud OVH Cloud

Création de liste déroulante

17 réponses
Avatar
Marc Daydé
Bonjour à tous et toutes et bonne année
Je me permet de vous poser une question simple : comment fait on une liste
déroulante ( la cellule à un petit ascenseur par coté) dans Excel . Ex :
j'ai Pierre, paul ,jacques dans 3 cellules differents , dans la même
colonne. Je veux que ces noms apparaissent au choix dans une autre
cellule.Quelle est la manip?

Merci de m'accorder un peu de votre temps.

7 réponses

1 2
Avatar
Patrick BASTARD
Bonsoir, *Daniel*

Deux autres questions auxquelles tu dois répondre pour améliorer ta
structuration des données:

1. Y a-t-il des dépendances entre tes listes?


Pas de dépendance, chaque liste est indépendante, mais je garde bien
précieusement ce code adapté d'après une idée de Sitting Hoax BM
'3/1/2005
'à coller dans le module de la feuille

'****************
Private Sub Worksheet_Change(ByVal Target As Range)
addr = Target.Address
If Range("a1") = "x" Then
Range("b1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, Operator:=xlBetween,
Formula1:="=liste1"
.ShowInput = True
.ShowError = True
Range(addr).Offset(1, 0).Select
Exit Sub
End With
End If
If Range("a1") = "y" Then
Range("b1").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, Operator:=xlBetween,
Formula1:="=liste2"
.ShowInput = True
.ShowError = True
Range(addr).Offset(1, 0).Select
Exit Sub
End With
End If
Range(addr).Select
End Sub
'******************
Qui permet de définir une liste de validation conditionnelle.


Autrement dit, tu auras toujours AUTANT de Surfaces que d'Usines.
Dans ce cas, tu pourras compter le nombre d'Usines seulement (avec
DECALER(;;;NB();).
Surface serait défini ainsi:
ÞCALER(Usines;0;1)

2. Les noms des listes sont-ils bien choisis. Suffit-il de les lire
pour comprendre immédiatement à quoi ils réfèrent.
Les noms choisis sont explicites -On n'y gagne pas en longueur, mais pour la

maintenance...-


Autrement, il n'y a rien à rajouter :-)


Encore merci, Daniel,

Bien cordialement,


Patrick.

Avatar
Daniel.M
Patrick,


1. Y a-t-il des dépendances entre tes listes?


Pas de dépendance, chaque liste est indépendante, mais je garde bien
précieusement ce code adapté d'après une idée de Sitting Hoax BM
'3/1/2005
'à coller dans le module de la feuille

'****************
Private Sub Worksheet_Change(ByVal Target As Range)
addr = Target.Address
If Range("a1") = "x" Then
...
End If
If Range("a1") = "y" Then
...
End If
Range(addr).Select
End Sub
'******************
Qui permet de définir une liste de validation conditionnelle.



Ma façon de définir une liste de validation conditionnelle serait de mettre la
formule suivante dans le code de la liste et de FAIRE FI complètement des
événements Worksheet_Change

=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

AMA (et j'insiste, c'est juste mon avis perso), moins ton modèle fait appel aux
événements, plus il est rapide. Car avec le code soumis ci-dessus, le processus
de re-définition des listes de validation pour A1 s'effectue à chaque changement
sur cette feuille. Dans celui que je te propose, la formule n'est recalculée que
si A1 change.

Dernière remarque: Hypothétiquement, il est possible que Liste1 et/ou Liste2 (ni
aucune des 50 autres listes de ton classeur) n'ait pas besoin d'être définies
pour autant que ces Noms puissent être facilement dérivés de la valeur en A1: un
seul Nom qui va chercher la bonne Liste selon la valeur en A1 (un autre gain de
performance). À toi de voir.

Salutations,

Daniel M.


Avatar
Patrick BASTARD
Bonjour, *Daniel*
Je lis à l'instant ton post
avec le plus grand intéret :

Mais trop, ou pas assez dormi, je ne pige pas tout :

Ma façon de définir une liste de validation conditionnelle serait de
mettre la formule suivante dans le code de la liste et de FAIRE FI
complètement des événements Worksheet_Change

=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))
Je ne vois pas où placer cette formule


AMA (et j'insiste, c'est juste mon avis perso), moins ton modèle fait
appel aux événements, plus il est rapide. Car avec le code soumis
ci-dessus, le processus de re-définition des listes de validation
pour A1 s'effectue à chaque changement sur cette feuille. Dans celui
que je te propose, la formule n'est recalculée que si A1 change.


Ca, j'ai réussi à le comprendre, et me paraît logique.

Bien cordialement,

Patrick.

Avatar
Patrick BASTARD
Bonjour, *Daniel*

Oublie ma dernière intervention.

J'ai fini par comprendre :

En F1:F15 : Liste1
En G1:G12 : Liste2
En H1:H15 : MaListe avec pour chaque item
=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

Si Donnée, Validation, liste, H1:H15 en B1, le choix est bien fonction de la
valeur entrée en A1.

Merci de m'avoir permis de découvrir une technique que je ne connaissais pas
encore.

Mais il en reste quand même un paquet...

Bien cordialement,

Patrick.



Ma façon de définir une liste de validation conditionnelle serait de
mettre la formule suivante dans le code de la liste et de FAIRE FI
complètement des événements Worksheet_Change

=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

AMA (et j'insiste, c'est juste mon avis perso), moins ton modèle fait
appel aux événements, plus il est rapide. Car avec le code soumis
ci-dessus, le processus de re-définition des listes de validation
pour A1 s'effectue à chaque changement sur cette feuille. Dans celui
que je te propose, la formule n'est recalculée que si A1 change.



Avatar
Daniel.M
Salut Patrick,

C'est ça!

N'oublie pas de définir ListeNulle qui contiendrait la string (ou quelquechose
du genre):
"Absence de choix. Vérifiez que vous avec x ou y en A1"

Salutations,

Daniel M.
Avatar
Daniel.M
Bonjour.

J'ai fini par comprendre :

En F1:F15 : Liste1
En G1:G12 : Liste2
En H1:H15 : MaListe avec pour chaque item
=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

C'est ça!


Non, c'est pas ça! J'avais mal lu ta réponse.


Tu fais :

En F1:F15 : Liste1
En G1:G12 : Liste2

Et dans ta cellule de validation. Menu Données/Validation, choisir Liste et
entrer la formule:
=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

Salutations,

Daniel M.

Avatar
Patrick BASTARD
Bonjour, *Daniel*

Effectivement.

Ca fonctionnait avant, mais cette nouvelle manière économise une liste
intermédiaire inutile (Maliste).

J'en apprends un peu plus chaque jour (formule dans la source d'une liste).

Merci,

Bien cordialement,

Patrick.


Bonjour.

J'ai fini par comprendre :

En F1:F15 : Liste1
En G1:G12 : Liste2
En H1:H15 : MaListe avec pour chaque item
=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

C'est ça!


Non, c'est pas ça! J'avais mal lu ta réponse.


Tu fais :

En F1:F15 : Liste1
En G1:G12 : Liste2

Et dans ta cellule de validation. Menu Données/Validation, choisir
Liste et entrer la formule:
=SI($A$1="x";Liste1;SI($A$1="y";Liste2;ListeNulle))

Salutations,

Daniel M.



1 2