Doublon dans liste déroulante

  • Initiateur de la discussion Initiateur de la discussion oover56
  • Date de début Date de début

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 !

O

oover56

Guest
Bonjour à Tous,
Je vous sollicite de nouveau pour me sortir d'une impasse....
J'ai un tableau avec des listes déroulantes en cascade générées par les fonctions index equiv.
Malheureusement ces listes font des doublons (cf PJ)
Pouvez m'aider à contourner ce problème sans passer de l'écriture vba si possible.
Merci de votre aide
Oover56
 

Pièces jointes

Re : Doublon dans liste déroulante

Bonsoir,

Avec VBA

1-Noms de champ à créer dans Tarif:
finition =DECALER($D$5;;;NBVAL($D$5:$D$2000))
HT =DECALER($E$5;;;NBVAL($E$5:$E$2000))
Parement =DECALER($C$5;;;NBVAL($C$5:$C$2000))
produit =DECALER($B$5;;;NBVAL($B$5:$B$2000))

2-Code à copier dans Fiche_Devis (clic-droit sur le nom d'onglet puis Afficher le code)

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$13:$B$13" Then
      Set d1 = CreateObject("Scripting.Dictionary")
      For Each c In [produit]:  d1(c.Value) = "": Next c
      For Each c In d1.keys: temp = temp & c & ",": Next c
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
     End If
     '-- niv 2
     If Target.Address = "$C$13:$D$13" Then
       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In [parement]
         If c.Offset(0, -1) = Target.Offset(0, -2) Then d1(c.Value) = ""
       Next c
       If d1.Count > 0 Then
         For Each c In d1.keys: temp = temp & c & ",": Next c
         Target.Validation.Delete
         Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
       End If
     End If
     '---niv3
     If Target.Address = "$E$13:$G$13" Then
       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In [finition]
         If c.Offset(0, -2) = Target.Offset(0, -4) And _
            c.Offset(0, -1) = Target.Offset(0, -2) Then d1(c.Value) = ""
       Next c
       If d1.Count > 0 Then
         For Each c In d1.keys: temp = temp & c & ",": Next c
           Target.Validation.Delete
           Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
        End If
    End If
    '--- niv 4
    If Target.Address = "$H$13" Then
       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In [HT]
         If c.Offset(0, -3) = Target.Offset(0, -7) And _
            c.Offset(0, -2) = Target.Offset(0, -5) And _
            c.Offset(0, -1) = Target.Offset(0, -3) Then d1(c.Value) = ""
       Next c
       If d1.Count > 0 Then
         For Each c In d1.keys: temp = temp & c & ",": Next c
           Target.Validation.Delete
           Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
        End If
    End If
 End Sub

http://boisgontierjacques.free.fr/fichiers/DonneesValidation/DV_4niv_devis.xlsm

JB
 

Pièces jointes

Dernière édition:
Re : Doublon dans liste déroulante

Merci à vous 2
Le fichier étant beaucoup plus fourni que celui de l'exemple, je crains de ne pouvoir mettre en application vos formules.
Merci quand même de votre aide
Oover56
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

G
Réponses
3
Affichages
8 K
Gazzzz
G
S
  • Question Question
Réponses
5
Affichages
732
stephane makaya
S
P
Réponses
17
Affichages
4 K
papillondelumiere
P
Retour