Double menus déroulants

Bonsoir,

Je souhaite créer deux menus déroulants en lien avec l'un avec l'autre.

Dans la feuille 1, colonne A, une liste d'écoles (l'école peut revenir plusieurs fois).

Dans la colonne B, une liste de classe (la même classe d'une même école peut revenir dans la liste).

En feuille 2, en C6, je souhaite avoir une liste de validation déroulante avec ECOLE A / ECOLE B / ECOLE C / ECOLE D (mais ne les avoir qu'une seule fois).

puis selon l'école sélectionnée en C6, avoir en C7 une autre liste de validation déroulante avec les noms des classes présentes dans l'école (mais ne les avoir qu'une seule fois dans la liste).

Je vous remercie de m'aider.

47forum-3.xlsx (10.54 Ko)

Bonsoir M. Agard, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code commenté. Le code se trouve dans trois endroits différents :

• ThisWorkbook, pour lancer la Macro1 à l'ouverture du classeur et ainsi définir la validation de données en C6 et la variable publique TC.

• Module1, qui contient la procédure Macro1 et la déclaration de la variable publique TC.

• Feuil2(Feuil2), qui contient le code qui va définir, au changement dans C6, la validation de données en D6...

31magard-v01.xlsm (21.68 Ko)

Bonjour,

Alors déjà, je te remercie car je l'ai transposé sur mon fichier original et ça marche mais partiellement car je me retrouve face à une erreur d'execution '13'.

La liste de validation de l'école fonctionne mais c'est lorsque je choisi une école que se passe l'erreur d'execution.

Voilà mon code transposé dans la feuille "LISTING":

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim L As String 'déclare la variable L (Liste)

If Target.Address <> "$E$2" Then Exit Sub 'si le changement a lieu ailleurs qu'en E2, sort de la procédure
Target.Offset(0, 1).ClearContents 'efface F2
If Target.Value = "" Then Exit Sub 'si F2 est effacée, sort de la procédure
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
    'si la valeur ligne I colonne 1 de TC est égale à la valeur de E2
    'alimente le dictionaire D avec les valeurs de la colonne 2 de TC (Classe)
    If TC(I, 8) = Target.Value Then D(TC(I, 10)) = ""
Next I 'prochaine ligne de la boucle
L = Join(D.Keys, ",") 'définit la liste L (les élément du dictionnaire D sans doublon séparés par une virgule)
With Range("F2").Validation 'prend en compte la validation de données de la cellule F2
    .Delete 'efface une éventuelle ancienne validation de données
    .Add xlValidateList, , , L 'définit la valitation de données en E2 (Liste L)
End With 'fin de la prise en compte de la validation de données de la cellule F2
End Sub

La ligne que le débogeur me surligne est la ligne

For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)

Sur la feuille LISTE_CLASSE, le nom de l'école est en colonne H (8) et le nom de la classe est en J (10).

je te remercie de m'aider.

bonjour

par formule

27m-agard.xlsx (11.93 Ko)

si ok des >>>>des explications/ameliorations

cordialement

Bonjour le fil, bonjour le forum,

Je pense que tu as dû oublier de copier/coller le code dans le composant ThisWorkbook :

Private Sub Workbook_Open() 'à l'ouvertur du classeur
Module1.Macro1 'lance la procédure [Macro1] du module [Module1]
End Sub

En pièce jointe la version 2 modifiée...

27magard-v02.xlsm (22.23 Ko)

Bonjour,

Merci de ton aide mais j'ai encore du mal à l'appliquer à mon fichier. Alors, pour faciliter les choses (et j'aurai dû faire ça dès le début en fait), je te renvoie un fichier avec les emplacements des informations dans les cellules telles qu'ils sont positionnés dans mon fichier sur lequel je travaille (mais que je ne peux poster ici car il y a des info confidentielles).

Merci encore de ton aide.

22forum-4.xlsm (20.14 Ko)

Bonsoir le fil, bonsoir le forum,

En effet, quelle perte de temps inutile ! Tu commences par C6 / C7 puis après c'est H8 / J10 et finalement c'est E2 / F2... Il y a des jours où je me demande pourquoi je m'emm...de à commenter les codes !...

La version 03 adaptée :

36magard-v03.xlsm (21.14 Ko)

Bonjour,

C'est parce que je souhaite comprendre comment cela fonctionne et que pour le deuxième exemple, on s'est mal compris. je suis désolé.

J'ai donc pris ton exemple et j'ai collé sur chaque feuille mes données utilisées. Et ça marche.

J'ai cependant une dernière requête: est-ce que la liste peut se classer par ordre alphabétique?

Rechercher des sujets similaires à "double menus deroulants"