Deux menus déroulant liés

Deux menus déroulant liés - VB/VBA/VBS - Programmation

Marsh Posté le 07-11-2006 à 20:15:44    

Bonjour,
 
je souhaite réalisé un second menu déroulant qui dépende du choix effectué à partir d'un premier menu déroulant.  
L'exemple suivant, concret, permet je pense de bien comprendre.
 
Dans A1, je fais un menu déroulant qui permet de selectionner un constructeur automobile, puis dans B1, je souhaite  
faire un menu qui permette de choisir le modèle de véhicule. Ex : Si je sélectionne RENAULT, le second menu me  
propose les modèles MEGANE, ESPACE ..., mais si je choisi dans A1 PEUGEOT, je dois pouvoir selectionner dans le menu
suivant 107, 207 ...  
 
La solution temporaire mise en place est assez peu pratique, j ai un menu déroulant avec les constructeur et un second  
menu avec tous les modèles confondus (et la liste est longue!!!)
Je créé mes menus en nommant une plage de données, puis DONNEES/ VALIDATION/ LISTE.
 
 
Merci pour votre aide (la molette de ma souris vous en sera reconnaissante!)

Reply

Marsh Posté le 07-11-2006 à 20:15:44   

Reply

Marsh Posté le 07-11-2006 à 21:11:30    

Bonsoir,
peux-tu mettre tous les modèles d'un constructeur sur une ligne (ou une colonne) distincte? avec en tête de ligne (ou de colonne) le nom du constructeur.?
cela permettrait de sélectionner en vb la ligne ou la colonne qui servira au second menu déroulant.
 
Cordialement

Reply

Marsh Posté le 07-11-2006 à 21:56:59    

Oui, c'est tout à fait possible (en fait je réserve toujours une feuille cachée sous excel où je place toute mes données pour la programmation).
Cependant, je ne vois pas comment tu vas faire sous VB pour que le second menu déroulant se "mette à jour" automatiquement, c'est à dire sans passer par l'intermédiaire d'une macro commandée par un command boutton par ex?  
J'attend ton idée pour continuer ! Merci
Amicalement.

Reply

Marsh Posté le 08-11-2006 à 07:57:18    

Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
 
'le Premier menu déroulant est en col A1
'Le deuxiéme est sur la même feuille
' La colonne E est supposée être celle de liste de validation du deuxième menu
'La feuille deux contient par colonne le constructeur puis les véhicules
' Le menu 2 aura en première ligne le nom du constructeur, à gèrer si necessaire
 
If Target.Column = 1 Then
 
     jecherche = Target.Value
     
     With Sheets(2).Range("a1:iv1" )
     Set fifi = .Find(What:=jecherche, After:=ActiveCell, LookIn:=xlFormulas)
    cascade = fifi.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    zone = "$" & Left(cascade, Len(cascade) - 1)
End With
Sheets(2).Range(zone & ":" & zone).Copy Sheets(1).Range("e1" )
 
End If
 
End Sub
 
Cordialement

Reply

Marsh Posté le 08-11-2006 à 19:41:14    

Merci bien ! Et pour le principe de fonctionnement, si je comprend bien, tu copies la plage de données de la feuille 2 que tu insères dans la plage de validation du second menu de la premiere feuille!

Reply

Marsh Posté le 08-11-2006 à 19:51:21    

Bonsoir,
C'est tout à fait cela . Il est dommage que la plage de validation ne puisse se trouver dans une autre feuille.
@+

Reply

Marsh Posté le 09-11-2006 à 04:50:14    

bonjour,

Citation :

Il est dommage que la plage de validation ne puisse se trouver dans une autre feuille


 
C'est possible à condition d'utiliser des plages nommées (Insertion / Nom / Définir) et non pas les adresses.
 
A+


Message édité par galopin01 le 09-11-2006 à 04:50:50
Reply

Marsh Posté le 09-11-2006 à 06:53:22    

bonjour,
Aloïs a encore frappé
Je vais revoir ma copie dans la journée
 
Merci galopin01

Reply

Marsh Posté le 09-11-2006 à 07:16:51    

Bonjour,
 
 
Private Sub Worksheet_Change(ByVal Target As Range)
'le Premier menu déroulant est en col A
'le deuxième en B
'Donner à chaque colonne de la feuil2 le nom du constructeur
'commencer la liste de chaque véhicule en ligne 1
'pas besoin de zone de validation sur feuil1 pour le menu2
 
'Net avantage : pour chaque cellule le menu2 reste adapté dans le cas d'une modification de contenu
' Encore Merci Galopin01
 
If Target.Column = 1 Then
Range("B" & Target.Row).Select
 
 With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & Target.Value
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    End If
End Sub
 
Cordialement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed