Liste déroulante 2 colonnes

  • Initiateur de la discussion Initiateur de la discussion DURDUR
  • 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 !

D

DURDUR

Guest
Bonjour à tous.

Mes données sont sur deux colonnes: "CODE" & "EN CLAIR".

Dans ma liste déroulante, j'aimerais y voir la colonne "EN CLAIR" (plus facile pour la recherche), mais c'est le code qui doit s'afficher.

Est ce possible à faire SANS ou avec VBA.

Merci.

JCB57
 
Re : Liste déroulante 2 colonnes

Bonsoir,

Merci à JOCELYN pour sa réponse rapide.

Je suis allé faire un tour sur le fil indiqué.

J'ai trouvé super le fait de supperposer les valeurs des colonnes, mais malgrés moult essais, je ne suis pas arrivé à l'adapter à mon fichier (ci-joint).

C'est vrai que je ne suis pas un expert.

Si quelqu'un peut y jeter un d'oeil et surtout m'expliquer la solution, je suis preneur.

Merci à tous.

JCB57
 

Pièces jointes

Re : Liste déroulante 2 colonnes

Bonsoir,

C'est tout bon, mais est-il possible de forcer l'écriture uniquement de l'immatriculation dans la colonne correspondante?

Et après j'adapterai la formule pour les aérodromes.

Merci encore.

JCB57
 
Re : Liste déroulante 2 colonnes

Pour empêcher la saisie de la seconde colonne, il faut du VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
p = Application.Match(Target, Application.Index([avions], , 1), 0)
If IsError(p) Then
Application.EnableEvents = False
Target = [mémo]
Application.EnableEvents = True
Else
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End Sub

Données/Validation

JB
 

Pièces jointes

Dernière édition:
Re : Liste déroulante 2 colonnes

Bonjour,

Tout d'abord, merci pour tes réponses.

La 2ème solution en VBA a un inconvénient. Si dans ta liste déroulante, tu choisi un avion, mais que tu clique sur le type, il te renvoie l'immatriculation du premier avion de ce type.

J'ai immaginé une chose que je ne sais pas mettre en pratique:😕

Concatener les 2 colonnes (ça c'est facile)🙂
aprés le choix, garder qu'une partie de ce choix pour l'écrire dans la colonne.

Est ce possible sans VBA.

Merci à tous ceux qui voudront bien se 🙄pencher sur cette devinette.

JCB57
 
Re : Liste déroulante 2 colonnes

Bonsoir,

C'est exact, je n'avais pas vu qu'il y avait du code VBA à rajouter.

Maintenant, je voudrais faire la même chose avec les aérodromes et leur code OACI.
Le code OACI est à écrire dans la colonne F (Aller)
et un autre aérodrome dans la colonne G (Retour)

Faire la liste déroulante ne pose aucun problèmes, mais faut-il aussi mettre du code VBA, et où ?

Merci de votre aide.

JCB57
 
Re : Liste déroulante 2 colonnes

Noms de champ:

AVIONS =DECALER(Data!$E$2;;;NBVAL(Data!$E:$E)-1;3)
CODE_OACI =DECALER(Data!$A$2;;;NBVAL(Data!$A:$A)-1;4)

Attention! il faut d'abord définir les noms avec une colonne, faire les listes et enfin modifier les noms avec 3 et 4 colonnes.

Le code est à placer dans Feuil5:
-clic-droit onglet
-Visualiser le code

Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Column = 3) And Target.Count = 1 Then
p = Application.Match(Target, Application.Index([avions], , 1), 0)
If IsError(p) Then
Application.EnableEvents = False
Target = [mémo]
Application.EnableEvents = True
Else
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End If
If (Target.Column = 6) And Target.Count = 1 Then
p = Application.Match(Target, Application.Index([code_oaci], , 1), 0)
If IsError(p) Then
Application.EnableEvents = False
Target = [mémo]
Application.EnableEvents = True
Else
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If (Target.Column = 3 Or Target.Column = 6) And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End Sub

JB
 

Pièces jointes

Re : Liste déroulante 2 colonnes

Bonjour,

Parti d'une simple feuille EXCEL, où les formules les plus compliquées étaient des totaux, j'arrive maintenant, grâce à l'aide que vous m'apportez, à une application complexe.

Dans les essais précédents et aussi sur le dernier fichier, sur lequel je viens de travailler, lorsque je fais:

DONNÉES
VALIDATION
AUTORISER: Liste
SOURCE: =CODE_OACI

Excel me retourne ce message d'erreur:

"La liste source doit être délimitée ou faire référence à une seule ligne ou colonne"

La même chose avec : SOURCE: =AVIONS

Que ce passe-t-il ?

Je vous mets encore à contribution.

Merci.

JCB57
 
Re : Liste déroulante 2 colonnes

Attention! il faut d'abord définir les noms avec une colonne, faire les listes et enfin modifier les noms avec 3 et 4 colonnes.

-Créer les noms
AVIONS =DECALER(Data!$E$2;;;NBVAL(Data!$E:$E)-1;1)
CODE_OACI =DECALER(Data!$A$2;;;NBVAL(Data!$A:$A)-1;1)

-Créer les menus

Modifier les noms:
AVIONS =DECALER(Data!$E$2;;;NBVAL(Data!$E:$E)-1;3)
CODE_OACI =DECALER(Data!$A$2;;;NBVAL(Data!$A:$A)-1;4)

Données/Validation

JB
 
Re : Liste déroulante 2 colonnes

Bonjour,

J'ai confondu vitesse et précipitation. Je n'avais pas lu entièrement le message.
C'est OK, ça tourne, mais (il y a toujours un mais), peut-on limiter la "saisie forcée" à une plage de cellules. A présent il est impossible de se servir des cellules (au delà de la ligne 18) dans les colonnes 3,6 et 7.
Je pense qu'il faut changer "target.column=3".
Je ne suis vraiment pas copain avec VBA.

Encore Merci.

JCB57
 
Re : Liste déroulante 2 colonnes

Pour limiter la saisie au champ C5:C18:


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([c5:c18], Target) Is Nothing And Target.Count = 1 Then
p = Application.Match(Target, Application.Index([avions], , 1), 0)
If IsError(p) Then
Application.EnableEvents = False
Target = [mémo]
Application.EnableEvents = True
Else
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End If
'---
If Not Intersect([f5:f18], Target) Is Nothing And Target.Count = 1 Then
p = Application.Match(Target, Application.Index([code_oaci], , 1), 0)
If IsError(p) Then
Application.EnableEvents = False
Target = [mémo]
Application.EnableEvents = True
Else
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) & Target.Value & Chr(34)
End If
End If
End Sub

JB
 

Pièces jointes

Re : Liste déroulante 2 colonnes

Bonsoir,

Un très grand MERCI à BOISGONTIER pour son aide rapide.

Ça marche super poil.

Voilà le fichier terminé.

J'ai ouvert une nouvelle list pour finaliser.

""Trouver l'origine d'un "interval temps" sur plusieurs feuilles ""

Encore MERCI

JCB57
 

Pièces jointes

- 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

  • Question Question
Microsoft 365 agrandir la liste
Réponses
21
Affichages
661
Réponses
8
Affichages
311
Retour