Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Choix multiples pour une valeur identique

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 !

activeforce

XLDnaute Occasionnel
Bonjour,

Quel formule dois je utiliser pour avoir un choix multiple pour une valeur identique.

Exemple selon le tableau ci joint : Dans la cellule A3 , je choisis la famille BR, j'aimerai qu'automatiquement, il me propose les différents types selon la matrice. Ici dans notre exemple BR correspond à Bouche de reprise ou Bouche d'extraction ou Grille de transfert.

Merci par avance.
 

Pièces jointes

Re : Choix multiples pour une valeur identique

Bonsoir la force, bonsoir le forum,

En pièce jointe une proposition avec le code ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim lt As String 'déclare la variable lt (LisTe de validation)

'si le changement a lieu aillerus que dans la colonne A ou sur les lignes 1 à 2, sort de la procédure
If Target.Column > 1 Or Target.Row < 3 Then Exit Sub
'si la cellule est effacée, efface la cellule en colonne B, sort de la procédure
If Target.Value = "" Then Target.Offset(0, 1).Value = "": Exit Sub
With Sheets("Matrices") 'prend en compte l'onglet "Matrices"
    dl = .Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 2 (=B)
    Set pl = .Range("B3:B" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Matrices"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    If cel.Value = Target.Value Then 'condition : si la valeur de la cellule est égale à celle de la cellule éditée
        lt = IIf(lt = "", cel.Offset(0, 1).Value, lt & "," & cel.Offset(0, 1).Value) 'définit la liste lt
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
With Target.Offset(0, 1).Validation 'prend en compte la validadion de données dans la cellule adjacente en colonne B
    .Delete 'supprime une éventuelle validation de données existante
    .Add Type:=xlValidateList, Formula1:=lt 'ajoute la liste lt comme nouvelle validation de données
End With 'fin de la prose en compte de la validation de données...
'si la liste lt n'est pas vide, affiche le premier élément dans la cellule adjacente en colonne B
If lt <> "" Then Target.Offset(0, 1).Value = Split(lt, ",")(0)
End Sub
Le fichier :
 

Pièces jointes

Re : Choix multiples pour une valeur identique

Bonjour,

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([a3:A1000], Target) Is Nothing And Target.Count = 1 Then
    Set f = Sheets("matrices")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("b3:b" & f.[b65000].End(xlUp).Row): d(c.Value) = "": Next c
    Target.Validation.Delete
    Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
  End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([a3:A1000], Target) Is Nothing And Target.Count = 1 Then
   If Target <> "" Then
    Set f = Sheets("matrices")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("b3:b" & f.[b65000].End(xlUp).Row)
      If c.Value = Target Then d(c.Offset(, 1)) = ""
    Next c
    Target.Offset(, 1).Validation.Delete
    Target.Offset(, 1).Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
    a = d.keys: Target.Offset(, 1) = a(0)
    If d.Count > 1 Then Target.Offset(, 1).Select: SendKeys "%{down}"
   Else
    Target.Offset(, 1) = ""
   End If
  End If
End Sub

Attention! sur Excel 2000, la longueur de la chaîne de données/validation doit être <200 caractères


JB
 

Pièces jointes

Dernière édition:
Re : Choix multiples pour une valeur identique

Bonjour le fil, bonjour le forum,

Le code de Jacques adapté à ton cas :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect([a3:a1000], Target) Is Nothing And Target.Count = 1 Then
    Set f = Sheets("matrices")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("b3:b" & f.[b65000].End(xlUp).Row): d(c.Value) = "": Next c
    Target.Validation.Delete
    Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
  End If
End Sub

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([a3:a1000], Target) Is Nothing And Target.Count = 1 Then
   If Target <> "" Then
    Set f = Sheets("matrices")
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In f.Range("b3:b" & f.[b65000].End(xlUp).Row)
      If c.Value = Target Then d(c.Offset(, 1)) = ""
    Next c
    Target.Offset(, 2).Validation.Delete
    Target.Offset(, 2).Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
    a = d.keys: Target.Offset(, 2) = a(0)
    If d.Count > 1 Then Target.Offset(, 2).Select: SendKeys "%{down}"
   Else
    Target.Offset(, 2) = ""
   End If
  End If
End Sub
 
- 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

Discussions similaires

M
Réponses
4
Affichages
2 K
margaux_
M
B
Réponses
6
Affichages
2 K
B
B
Réponses
4
Affichages
2 K
benoitoleron
B
P
Réponses
28
Affichages
5 K
J
Réponses
5
Affichages
2 K
journeydo
J
M
Réponses
5
Affichages
2 K
mauricette007
M
E
Réponses
10
Affichages
2 K
epsman
E
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…