Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Validation de données avec liste déroulante en cascade

24 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'aimerais lier une liste d=E9roulante de choix en colonne C avec une liste=
de validation de donn=E9es en colonne B.

Quand un choix est fait en colonne B, automatiquement une liste d=E9roulant=
e est cr=E9=E9e en colonne C si on a plus d'une occurrence qui correspond a=
u choix effectu=E9 dans la liste de validation.

Merci d'avance.

http://cjoint.com/?EDmvjLVsoa7

10 réponses

1 2 3
Avatar
MichD
Fichier exemple de listes de validation multiple créée par AV (Alain Valon)

http://cjoint.com/?EDqmMwry08m

Je n'ai pas d'aller plus loin. Désolé, mais je n'ai pas la flemme pour ce type de problématique!
Avatar
MichD
Un autre fichier exemple : http://cjoint.com/?EDqmV7QogGz
Avatar
Apitos
Bonjour,

Voila un exemple qui fonctionne.

ÞCALER(Listes!$B$1;EQUIV(BDD!$B2;ABC;0);0;NB.SI.ENS(ABC;BDD!$B2))

Seulement, j'ai un souci dans le code VBA pour sélectionner le premier élément de la deuxième liste en colonne C, s'il y a eu un changement dans la liste en colonne B :

http://cjoint.com/?EDsaLg0sSym
Avatar
MichD
En supposant que j'ai compris la question,

Remplace cette ligne de code de la procédure en feuille module "BDD")

Target.Offset(0, 1) = Sheets("listes").Range("TTT").Item(1)

Par :

With Worksheets("Listes")
Target.Offset(0, 1) = .Range("B2:B" & .Range("B65536").End(xlUp).Row).Item(1)
End With
Avatar
Apitos
Bonjour Michon,

J'aimerais afficher dans la deuxième liste de validation (Colonne C Feuil le BDD) le premier élément de la plage "TTT" correspondante au choix fa it dans la première liste de validation (Colonne B feuille BDD).

Si je choisi "A" le premier élément affiché dans la deuxième liste sera "1A"

Si je choisi "B", le premier élément affiché sera "1B"

"1C" pour le choix de "C"
"1D" pour le choix de "D"...etc.
Avatar
MichD
La procédure au complet du module feuille de la feuille BDD

'-----------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Variant
If Target.Column = 2 Then
If Target.Count = 1 And Target <> "" Then
With Worksheets("Listes")
X = Application.Match(Target, .Range("A2:A" & .Range("A65536").End(xlUp).Row), 0)
If Not IsError(X) Then
Application.EnableEvents = False
Target.Offset(0, 1) = .Range("B2:B" & .Range("B65536").End(xlUp).Row).Item(X)
Application.EnableEvents = True
End If
End With
End If
End If
End Sub
'-----------------------------------------------------
Avatar
Apitos
Merci pour le code.

Seulement j'ai une erreur d'exécution sur cette ligne si le nombre de cel lules sélectionnées est supérieur 1.

If Target.Count = 1 And Target <> "" Then
Avatar
Jacquouille
toutes tes cel comptées sont-elles vides?
Essaie avec OR au lieu de And .... and tu verras la différence

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Apitos" a écrit dans le message de groupe de discussion :


Merci pour le code.

Seulement j'ai une erreur d'exécution sur cette ligne si le nombre de
cellules sélectionnées est supérieur 1.

If Target.Count = 1 And Target <> "" Then




---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Comme ceci :


Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Variant
If Target.Column = 2 Then
If Target.Count = 1 Then
If Target <> "" Then
With Worksheets("Listes")
X = Application.Match(Target, .Range("A2:A" & .Range("A65536").End(xlUp).Row), 0)
If Not IsError(X) Then
Application.EnableEvents = False
Target.Offset(0, 1) = .Range("B2:B" & .Range("B65536").End(xlUp).Row).Item(X)
Application.EnableEvents = True
End If
End With
End If
End If
End If
End Sub
Avatar
Apitos
Bonsoir,

Merci Michon.

Ne peut-on pas abréger ces trois lignes (Eviter les If) ?

If Target.Column = 2 Then
If Target.Count = 1 Then
If Target <> "" Then
1 2 3