Bonjour à tous,
Pour des raisons de confidentialité, je ne peux pas partager le fichier sur lequel je travaille. Je vais essayer d'être clair :
J'ai une structure complexe hiérarchisée sur 3 niveaux du type 1 ; 1.1 ; 1.1.1 (10 chapitre au 1er niveau, 70 chapitres au 2ème niveau et 240 au 3ème niveau).
Pour chaque nouvel item que je souhaite enregistrer dans ma BDD, il me faut l'affecter à un chapitre du 3ème niveau. Je pourrais mettre une liste déroulante de 240 lignes mais ça ne me semble pas très ergonomique.
J'imagine donc de le faire en 3 fois : sélection du Chapitre 1 dans la liste du niveau 1, puis du chapitre 2 dans la liste des niveaux 2 qui dépendent du chapitre 1 et enfin du chapitre 3 dans la liste des niveaux 3 qui dépendent du chapitre 2 sélectionné.
Donc pour chaque item, pour chaque nouvelle ligne de mon tableur, les 3 premières cellules doivent servir à identifier les 3 niveaux choisis.
J'ai commencé à vouloir utiliser la validation de donnée mais pas ergonomique : au final, je ne souhaite conserver que le n° de chaque chapitre alors que dans l'affichage de la liste déroulante, il me faut le libellé des chapitres (du type 1-Blanc ; 2-Bleu, ..).
Je me suis donc tourné vers des combobox à 2 colonnes (N° chapitre ; Libellé) qui n'affichent que la première colonne.
Ca m'oblige alors à avoir 3 combobox par ligne sur un tableur qui devrait avoir plus de 400 lignes et 40 colonnes.
Mon problème : pour la lisibilité, je voudrais que les combobox soient de base masquées et qu'elles deviennent visibles quand je clique sur la cellule dans laquelle elles sont positionnées.
J'ai nommé mes Combobox selon les cellules dans lesquelles elles sont positionnées (Combobox231 en A23) mais le code suivant me met une erreur membre de méthode sur Controls :
Une idée pour corriger ou changer complètement de méthode ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Application.Intersect(Range("a23:c24"), Range(Target.Address)) Is Nothing Then i = Target.Row j = Target.Column n = i * 10 + j Me.Controls("ComboBox" & n).Visible = True End If End Sub
Partager