Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

  • Initiateur de la discussion Initiateur de la discussion pogote
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

pogote

Guest
Bonjour, j'aurais besoin de créer une liste grâce à la fonction Données --> Validation --> Option : Liste, mais :
1. regroupant des données de plusieurs colonnes
2. N'indiquant dans liste déroulante que les valeurs différentes de vide

[modification de mon post]
LA SOLUTION EST -->LA
[fin modification de mon post]

Petit exemple pour expliquer :

Colonne A : Valeur de la case A1 à A10, de A11 à A20 Vide
Colonne B : Valeur de la case A1 à A15, de A16 à A20 Vide
Colonne C : Valeur de la case A5 à A6, de A1 à A4 et de A7 à A20 Vide

Ma liste déroulante devrait être composée uniquement des valeurs suivante :

Valeur de la case A1 à A10
Valeur de la case A1 à A15
Valeur de la case A5 à A6

Qui aurait une idée, une solution ?
Merci d'avance pour vos lumières

Damien
 
Dernière modification par un modérateur:
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

j'ai vu qu'il y avait une possibilité avec insertion --> Nom --> Définir.

C'est peut être une piste mais il me manque encore l'essentiel... que ca fonctionne.

A plus
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Bonjour,

Tu peux définir tes listes déroulantes en les nommant.

Insertion - Nom - Définir

Nom : liste_1
Fait référence à : =DECALER(A1;;;NBVAL($A$1:$A$20)

Nom : liste_2
Fait référence à : =DECALER(B1;;;NBVAL($B$1:$B$20)

etc.

Ensuite, dans ta liste déroulante, tu fais appel aux noms ainsi définis.

Dans ton message, tu ne parles que de la colonne A. J'ai supposé qu'il s'agissait des colonnes A, B et C

Si pas ça, reviens en nous joignant un petit bout de fichier exemple.


Bon WE

@+
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Salut Tibo et merci pour ta réponse

tu as bien fait de supposer qu'il sagissait des colonnes A B C

Donc j'ai bien défini des noms de listes : (j'ai rajouté une deuxième parenthèse en fin de fonction : en rouge)
Insertion - Nom - Définir

Nom : liste_1
Fait référence à : =DECALER(A1;;;NBVAL($A$1:$A$20))

Nom : liste_2
Fait référence à : =DECALER(B1;;;NBVAL($B$1:$B$20))
Ensuite, comment fait-on appel (dans Données --> Validation --> Option : Liste) à ces listes ? J'ai toujours des erreurs !!!
J'ai essayé toutes ces possibilités :
=et(liste_1;liste_2;liste_3)
=liste_1;liste_2;liste_3
=(liste_1;liste_2;liste_3)
...
Je vous joint un fichier exemple, en espérant trouver une solution.

Et si en plus vous pouvez m'aider à comprendre comment mettre en application un bouton "recherche" en fonction de la valeur indiquée à partir de ma liste déroulante, qui renverait à la ligne correspondante, cela serait plus que parfait... en espérant bien sur que mon explication soit claire.
 

Pièces jointes

Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Bonsoir,

-Sélectionner le champ résultat
=fusiontriée3(A1:A20;B1:B20;C1:C20)
-Valider avecMaj+Ctrl+Entrée

Code:
Function FusionTriée3(taa As Range, tbb As Range, tcc As Range)
 Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In taa
    If c <> "" And Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
    For Each c In tbb
    If c <> "" And Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  For Each c In tcc
    If c <> "" And Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
  Next c
  temp = MonDico.items
  Call tri(temp, 0, UBound(temp, 1) )
  FusionTriée3 = Application.Transpose(temp)
End Function

Sub tri(a, gauc, droi)          ' Quick sort
 ref = a((gauc + droi) \ 2)
 g = gauc: d = droi
 Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi)
 If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
Formation Excel VBA JB


[/CODE]
 

Pièces jointes

Dernière édition:
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Salut BOISGONTIER, Salut forum,

Effectivement le fichier joint fonctionne parfaitement et correspond à mes besoins... Bref : Parfait.

Juste une petite remarque, le code Macro ci dessus correspond à quoi ?
- Au fonctionnement de ma liste déroulante ?
ou
- Au fonctionnement du bouton recherche, deuxième partie de ma question ?

Merci encore Forum
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Bonsoir,

Le code correspond à la fusion triée de 3 champs sans les vides:

>1. regroupant des données de plusieurs colonnes
>2. N'indiquant dans liste déroulante que les valeurs différentes de vide

La liste Données/Validation contient :
=DECALER($F$3;;;NB.SI($F$3:$F$29;"<>#N/A"))

JB
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Ok et bien c'est super. Il ne me reste plus qu'à faire des recherches sur le forum pour savoir comment mettre en application un bouton "recherche" en fonction du resultat de ma cellule. D'ailleurs si tu as une idée, n'hésite pas.

MERCI
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Je ne suis pas sûr de comprendre la question:


Le code ci dessous est activé après le choix dans la liste:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$E$1" Then
    MsgBox Target
  End If
End Sub

JB
 

Pièces jointes

Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Oui pour ça je suis d'accord, mais le résultat que je souhaiterais obtenir serait un renvoi à la ligne correspondant à la valeur choisi dans ma liste.

J'obtiens grâce a ton fichier, quand je choisi dans ma liste, une fenêtre de dialogue excel avec la lettre correspondante.

PS : Comment fait-on pour modifier les paramêtres de tes calculs ?

Merci
 
Dernière modification par un modérateur:
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Je pensais avoir quelques bases de excel mais je me rends compte que pas du tout... Je n'arrive pas à réadapter la macro et les informations contenues dans le fichier Fonction_FusionListeTriee3Listes(1).xls à mon propre tableur.

C'est logique vu que je ne sais pas comment cela fonctionne.

Je met un lien pour télécharger le fichier zippé (les capacités de XLD étant trop faible) :
Base_de_donnees.zip

Explication du fichier :
- en H3, j'ai ma liste déroulante de recherche par nom
- en I3, j'ai ma liste déroulante de recherche par N° Ident.
- dans mes colonne IA à IO, j'ai mes noms et prénoms regroupés
(O12 = Jacques ; P12 = Martin , donc OA12 = Jacques Martin)
- dans ma colonne HY, j'ai ma fonction de classement de N° Ident.
- dans ma colonne HZ, j'ai ma fonction de classement de Nom

Le but des 2 boutons "Rechercher par Nom" et Rechercher par N° Ident." (en tête colonnes H et I) serait de renvoyer l'utilisateur à la ligne correpondante à la recherche.

Merci pour votre aide
J'espère qu'un jour cela fonctionne
 
Re : Liste déroulante de valeurs de plusieurs colonnes, Comment faire ?

Bonjour,

En réalité, il y a fusion de plusieurs listes et non pas 3 comme spécifié dans la demande d'origine.

Voici une fonction matricielle qui permet de fusionner et trier N zones discontinues.

Dans le tableur:

Sélectionner F3:F30
=Fusiontrimz((A1:A20;B1:B20;C1:C20))
valider avec maj+ctrl+entrée

Code:
Function FusionTriMZ(nom)
  Set mondico = CreateObject("Scripting.Dictionary")
  For i = 1 To nom.Areas.Count
    For j = 1 To nom.Areas(i).Count
      c = Trim(nom.Areas(i)(j))
      If c <> "" And c <> 0 Then
        If c <> "" And Not mondico.Exists(c) Then mondico.Add c, c
      End If
    Next j
  Next i
  temp = mondico.items
  Call tri(temp, 0, UBound(temp, 1))
  FusionTriMZ = Application.Transpose(temp)
End Function

Sub tri(a, gauc, droi)          ' Quick sort
 ref = a((gauc + droi) \ 2)
 g = gauc: d = droi
 Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
       temp = a(g): a(g) = a(d): a(d) = temp
       g = g + 1: d = d - 1
     End If
 Loop While g <= d
 If g < droi Then Call tri(a, g, droi)
 If gauc < d Then Call tri(a, gauc, d)
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
12
Affichages
363
Retour