Liste déroulantes dépendantes (erreur à corriger)
Bonjour,
Actuellement en train de réaliser un tableau avec des listes déroulantes dépendantes, j'ai quelques questions car je n'arrive pas à obtenir ce que je souhaite.
Je réalise un tableau de données de sous-traitant en fonction du lot à réaliser (Couverture, bardage, gros oeuvre etc...)
Je m'explique:
J'ai 2 onglets:
- 1 onglet Nomenclature avec
ma liste des lots (Gros oeuvre, bardage etc...)
une liste de descriptif pour chaque lot: par exemple: pour le lot Bardage (Bardage acier, bardage alu, bardage bois etc...)
- 1 onglet RECAP dans lequel je souhaite sélectionner tout d'abord mon lot (colonne G) et ensuite sélectionner mon descriptif (Colonne J, K, M, N)
J'ai donc créé une liste de noms ainsi qu'une première liste de lots.
Cependant quand je souhaite créer une liste dépendante, sur mon onglet recap j'ai une erreur (La source est reconnue comme erronée).
J'ai indiqué la formule que j'ai noté dans la case J6 (en jaune dans mon fichier).
En essayant la même opération sur l'onglet Nomenclature, j'arrive à utiliser la fonction INDIRECT mais pas sur l'onglet récap.
Pouvez-vous m'aider svp?
Merci d'avance pour votre retour,
Bonsoir Jacky, bonsoir le forum,
Par formule je ne sais pas faire. Mais, si j'ai bien tout compris, voici le code de l'événementielle Change à placer dans le composant Feuil2 (Recat ST). Il crée, à chaque changement d'un lot, les listes de validation de données pour les Descriptions 1 à 5.
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim PL As Range 'déclare la variable PL (PLage)
Dim ONO As Worksheet 'déclare la variale ONO (Onglet Nomenclature)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Byte 'déclare la variable COL (COLOnne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim L As String 'déclare la variable L (Liste)
Dim CEL As Range 'déclare la variable CEL (CELlule)
If Target.Column <> 7 Then Exit Sub 'si le changement a lieu ailleurs que dans la colonne 7 (=> colonne G), sort de la procédure
If Target.Row < 5 Then Exit Sub 'si le changement a lieu dans une ligne inférieure à 5, sort de la procédure
Set PL = Target.Offset(0, 3).Resize(1, 5) 'définit la plage PL (correspondant aux descriptions 1 à 5)
PL.ClearContents 'efface le contenu de la plage PL
If Target.Value = "" Then Exit Sub 'si le Lot est effacé, sort de la procédure
Set ONO = Worksheets("Nomenclature") 'définit l'onglet ONO
Set R = ONO.Rows(3).Find(Target.Value, , xlValues, xlWhole) 'définit la recherche R (Recherche le lot dans la ligne 3 de l'onglet ONO)
If R Is Nothing Then Exit Sub 'si aucune occurrence trouvée, sort de la procédure
COL = R.Column 'définit la colonne COL de la première occurrence trouvée
DL = ONO.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet ONO
Select Case DL 'agit en fonction de DL
Case 5 'cas 5 (une seule valeur dans la liste)
L = ONO.Cells(5, COL) 'définit la liste L
Case Else 'tous les autres cas
TV = ONO.Range(ONO.Cells(5, COL), ONO.Cells(DL, COL)) 'définit le tableau des valeurs TV
L = Join(Application.Transpose(TV), ",") 'définit la liste L en joignant les données transposées de TV séparées par une virgule
End Select 'fin de l'action en fonction de DL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
With CEL.Validation 'prend en compte la validation de données de la cellule CEL
.Delete 'efface une éventuelle ancienne validation de données existante
.Add xlValidateList, Formula1:=L 'définit la liste L comme liste de validation de données
End With 'fin de la prise en compte de la validation de données de la cellule CEL
Next CEL 'prochaine cellule de la boucle
End SubMerci beaucoup, je n'étais pas parti sur la bonne solution en fait :D