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

Microsoft 365 Liste déroulante selon critère

FCMLE44

XLDnaute Impliqué
Bonjour

Dans la cellule I2, je souhaite intégrer une liste de choix conditionnelle
Je m'explique :
Lorsqu'en cellule H1, j'ai par exemple XXXX, j'aurais dans ma liste de choix toutes les sociétés de la colonne 1 correspondant à XXXX se trouvant dans la colonne F

Je sais faire les validations de données mais ca, je sèche.

Quelqu'un aurait il une idée ?

Merci
 

Pièces jointes

  • Classeur1.xlsx
    11.7 KB · Affichages: 16
Solution
Si par mégarde je clique sur la cellule B13 de la feuille salariés, j'obtiens une erreur d'exécution 1004.
Que pourrais je rajouter dans ce code pour que le débogage n'ait pas lieu
Merci
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim Rng As Range, c As Range, d As Object

   With Sheets("Paramètres")
      Set Rng = .Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row)
   End With

   If Target.Address = "$D$4" Then
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In Rng: d(c.Value) = "": Next c
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
   End If

   If Target.Address = "$B$13" Then
      Set d =...

cp4

XLDnaute Barbatruc
Bonsoir,

Si j'ai bien compris ta demande. Le code est dans le module de la feuille.

Bonne soirée.

edit: bonsoir JHA
 

Pièces jointes

  • Liste déroulante selon critère.xlsm
    19.1 KB · Affichages: 6

R@chid

XLDnaute Barbatruc
Bonjour @ tous,
Comme il l'a indiqué notre ami JHA, sous Excel pour Microsoft 365 c'est plus facile et on n'a pas besoin de formule matricielle.
Voir PJ


Cordialement
 

Pièces jointes

  • FCMLE44_ListeSelonCrit_V1.xlsx
    13.7 KB · Affichages: 4

FCMLE44

XLDnaute Impliqué
Bonsoir,

Si j'ai bien compris ta demande. Le code est dans le module de la feuille.

Bonne soirée.

edit: bonsoir JHA

Bonjour

Je n'ai pas réussi à reproduire sur mon fichier réel
Les données sociétés et RG se trouvent effet sur la feuille parametres
Le listes déroulantes sont sur la feuille salariés

J'ai mis cà dans le la feuille salarié ave les bonnes cellules

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range, c As Range, d As Object

Sheets("Paramètres").Select
Set Rng = Range("J2:J" & Range("D" & Rows.Count).End(xlUp).Row)
'End With

Sheets("salariés").Select
If Target.Address = "$D$4" Then
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In Rng: d(c.Value) = "": Next c
   Target.Validation.Delete
    Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
  End If

If Target.Address = "$b$13" Then
    Set d = CreateObject("Scripting.Dictionary")
    For Each c In Rng
If c.Value = Range("$D$4").Value Then
d(c.Offset(0, -5).Value) = ""
End If

Next c
   Target.Validation.Delete
    Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
  End If
End Sub

Cela ne fonctionne pas
Voici le fichier vide des données personnelles

Auriez vous une idée ?
 

Pièces jointes

  • Maquette STC TEST (11).xlsm
    381.5 KB · Affichages: 4

cp4

XLDnaute Barbatruc
Bonjour,

@FCMLE44 : Les .Select sont à éviter, ils ralentissent le code. Le code est dans le module de la feuille "Salariés" pourquoi mettre Sheets("Salariés").Select?

Code corrigé ci-dessous
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim Rng As Range, c As Range, d As Object

   With Sheets("Paramètres")
      Set Rng = .Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row)
   End With

   If Target.Address = "$D$4" Then
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In Rng: d(c.Value) = "": Next c
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
   End If

   If Target.Address = "$B$13" Then
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In Rng
         ' c est en col J on veut atteindre la société en col D, donc on se déplace à gauche de la colJ (soit -6)
         If c.Value = Range("$D$4").Value Then d(c.Offset(0, -6).Value) = ""
      Next c
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
   End If
End Sub

Bonne journée.
 

FCMLE44

XLDnaute Impliqué
Si par mégarde je clique sur la cellule B13 de la feuille salariés, j'obtiens une erreur d'exécution 1004.
Que pourrais je rajouter dans ce code pour que le débogage n'ait pas lieu
Merci
 

cp4

XLDnaute Barbatruc
Si par mégarde je clique sur la cellule B13 de la feuille salariés, j'obtiens une erreur d'exécution 1004.
Que pourrais je rajouter dans ce code pour que le débogage n'ait pas lieu
Merci
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim Rng As Range, c As Range, d As Object

   With Sheets("Paramètres")
      Set Rng = .Range("J2:J" & .Range("J" & Rows.Count).End(xlUp).Row)
   End With

   If Target.Address = "$D$4" Then
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In Rng: d(c.Value) = "": Next c
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
   End If

   If Target.Address = "$B$13" Then
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In Rng
         ' c est en col J on veut atteindre la société en col D, donc on se déplace à gauche de la colJ (soit -6)
         If c.Value = Range("$D$4").Value Then d(c.Offset(0, -6).Value) = ""
      Next c
      If d.Count = 0 Then
         MsgBox "Veuillez sélectionner Nom du RG!", vbokonky + vbCritical, "ECHEC....."
         Exit Sub
      Else
         Target.Validation.Delete
         Target.Validation.Add xlValidateList, Formula1:=Join(d.keys, ",")
      End If
   End If
End Sub
 

Discussions similaires

Réponses
5
Affichages
199
Réponses
2
Affichages
446
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…