Liste Déroulante + Liste Déroulante conditionnelle

Tibo2

XLDnaute Nouveau
Bonjour à tous,

Cela fait un petit moment que je galère sur ces histoires de listes et ce malgré les déjà très nombreux messages sur les forums.

Mon cas est pourtant simple, j'ai un tableau a deux colonne, la première avec les noms des clients et la deuxième avec les catégories de client.
ClientCategorie
EasyJetAdministrateur
EasyJetPiste
AirFrancePilote
AirFranceHotesse

Il s'agit d'un extrait de tableau. Je veux dans une autre feuille avoir un tableau avec pour N ligne la possibilité de choisir 1 client et 1 catégorie (N étant égale à la somme des types de client pour chaque catégorie).

Ce que je souhaite avoir c'est une macro qui me calcule N m'insère les N lignes avec les 2 premières colonnes Client et Categorie avec des listes déroulantes dedans qui me permettent de choisir. J'ai essayé un certain nombre de chose mais à chaque fois il y a un problème. Je commence forcement à me demander si mon idée est bonne (à la fin du message mon code), il marche quasiment mais il y a un problème de mise à jour de la liste conditionnelle... et finalement je me demande comment je pourrai ensuite créer des lignes automatiquement...
Quelqu'un a-t-il une autre méthode à me conseiller? Je pense que effectuer la macro sur SelectionChange n'est pas une bonne idée, sur Activate non... Il faudrait au final que ma liste soit toujours la, commment faire? Doit-on nécessairement créer un autre tableau avec des colonnes ayant pour en-tête les différents nom de client?

J'espère avoir été clair, je suis un peu desespéré la... Merci d'avance à celle ou celui qui pourra m'apporter quelques éléments


Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.Address = "$A$10" Then
        Set ListeClient = CreateObject("Scripting.Dictionary")
        For Each c In [client]
            If Not ListeClient.exists(c.Value) Then
                ListeClient(c.Value) = ""
                temp = temp & c & ","
            End If
        Next c
        Target.Validation.Delete
        Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
    
        Set ListeClient2 = CreateObject("Scripting.Dictionary")
        For Each d In [Categorie]
            If Not ListeClient2.exists(d.Value) And d.Offset(0, -1).Value = Target.Value Then
                ListeClient2(d.Value) = ""
                temp2 = temp2 & d & ","
            End If
        Next d
        Target.Offset(0, 1).Validation.Delete
        Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:=Left(temp2, Len(temp2) - 1)

End If
 End Sub
 

Tibo2

XLDnaute Nouveau
Re : Liste Déroulante + Liste Déroulante conditionnelle

Bonjour à moi-même ;)

Je viens de trouver un semblant de réponse, je l'écris au cas ou d'une part ça puisse servir à qqn et si qqn à des propositions d'amélioration je suis toujours preneur.

Pour créer ma première liste déroulante (normal), j'utilise Worksheet_SelectionChange sur les cellules de mon intérêt que je pourrai alors rentrer dans une boucle:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.Address = "$A$15" Then
        Set ListeClient = CreateObject("Scripting.Dictionary")
        For Each c In [client]
            If Not ListeClient.exists(c.Value) Then
                ListeClient(c.Value) = ""
                temp = temp & c & ","
            End If
        Next c
        Target.Validation.Delete
        Target.Validation.Add xlValidateList, Formula1:=Left(temp, Len(temp) - 1)
    End If
 End Sub

Et ensuite pour ma liste déroulante conditionnel ou cascade j'utilise Worksheet_Change, au début j'impose le premier mot par défaut dans la cellule puis je lui attribue une liste.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$A$15" And Target.Count = 1 Then
        With Worksheets("ProfilsUtilisateurs")
            Set PlageRecherche = .Range(.[A6], .[A100].End(xlUp))
            Target.Offset(0, 1).Value = Worksheets("ProfilsUtilisateurs").Range("client")(1).Offset(Application.Match(Target.Value, PlageRecherche, 0) - 1, 1)
        End With
        
        Set ListeClient = CreateObject("Scripting.Dictionary")
        For Each d In [Categorie]
            If Not ListeClient.exists(d.Value) And d.Offset(0, -1).Value = Target.Value Then
                ListeClient(d.Value) = ""
                temp2 = temp2 & d & ","
            End If
        Next d
        Target.Offset(0, 1).Validation.Delete
        Target.Offset(0, 1).Validation.Add xlValidateList, Formula1:=Left(temp2, Len(temp2) - 1)
    End If
End Sub

Reste plus qu'à faire une boucle de N de longeur et de me créer toutes ces listes...
N'hésitez pas si vous avez des remarques
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 402
Membres
103 200
dernier inscrit
pascalgip