Bonjour à tous,
Je fais une fois de plus appel à vous .... D'emblée merci à ceux qui s'intéresseront à l'amélioration du code que je vous propose ..
Alors voilà, je me suis fortement inspiré d'un code trouvé sur la toile, (Formation Excel VBA JB ->Listes cascade -> création de liste à partir d'une BD), permettant de faire des remplissages de cellules par sélection dans liste déroulante. Liste déroulante présentant des possibilités en fonction de valeurs présentes dans une autre cellule. (En l'occurrence provenant de liste également).
Je vous invite à jeter un Oeil au document ci-joint afin de mieux comprendre ma demande.
Le système crée une "Base de données" composée de différentes listes proposant les différentes possibilités en fonction des choix.
BD :
Liste
TV
RADIO
_TV1_
TV
PANASONIC
RADIO
PHILIPS
SONY
PANASONIC
_TV1_
Exception
PANASONIC
_TV1_
RADIO3
PHILIPS
RADIO1
RADIO2
RADIO3
SONY
RADIO2
PANASONIC
_TV1_
RADIO3
Exception
_L5_
_TV1_
10"
20"
30"
RADIO3
Jaune
Rouge
Bleu
RADIO1
Rouge
RADIO2
Rouge
Jaune
RADIO3
Jaune
Rouge
Bleu
RADIO2
Rouge
Jaune
_TV1_
10"
20"
30"
RADIO3
Jaune
Rouge
Bleu
_L5_
Noir
Il existe plusieurs soucis. Le premier est que si un type (= 3 différents ici : "TV" "RADIO" "_TV1_") est égal à un modèle, c'est le cas de "_TV1_", alors la liste proposera (10" 20" 30") à la place de exception.
Ceci est le plus gros soucis, les autres sont des soucis de non acceptation de certains caractères du genre "()-" .. Ou une erreur donnée si le mot ne commence pas par un underscore ou une lettre ...
Je suis conscient que j'ai un peu de mal à exprimer mon soucis clairement, mais je vous invite à regarder la pièce jointe qui peut être vous éclairera.
En résumé :
Le but de ce programme est de pouvoir créer des liste de choix dans des cellules qui soit en fonction des autres choix. (Exemple :"TV" ; "PANASONIC" ne doit pas proposer les mêmes choix que "RADIO" ; "PANASONIC").
Je vous remercies toutes et tous,
Valentin
Je fais une fois de plus appel à vous .... D'emblée merci à ceux qui s'intéresseront à l'amélioration du code que je vous propose ..
Alors voilà, je me suis fortement inspiré d'un code trouvé sur la toile, (Formation Excel VBA JB ->Listes cascade -> création de liste à partir d'une BD), permettant de faire des remplissages de cellules par sélection dans liste déroulante. Liste déroulante présentant des possibilités en fonction de valeurs présentes dans une autre cellule. (En l'occurrence provenant de liste également).
Je vous invite à jeter un Oeil au document ci-joint afin de mieux comprendre ma demande.
Le système crée une "Base de données" composée de différentes listes proposant les différentes possibilités en fonction des choix.
BD :
Liste
TV
RADIO
_TV1_
TV
PANASONIC
RADIO
PHILIPS
SONY
PANASONIC
_TV1_
Exception
PANASONIC
_TV1_
RADIO3
PHILIPS
RADIO1
RADIO2
RADIO3
SONY
RADIO2
PANASONIC
_TV1_
RADIO3
Exception
_L5_
_TV1_
10"
20"
30"
RADIO3
Jaune
Rouge
Bleu
RADIO1
Rouge
RADIO2
Rouge
Jaune
RADIO3
Jaune
Rouge
Bleu
RADIO2
Rouge
Jaune
_TV1_
10"
20"
30"
RADIO3
Jaune
Rouge
Bleu
_L5_
Noir
Il existe plusieurs soucis. Le premier est que si un type (= 3 différents ici : "TV" "RADIO" "_TV1_") est égal à un modèle, c'est le cas de "_TV1_", alors la liste proposera (10" 20" 30") à la place de exception.
Ceci est le plus gros soucis, les autres sont des soucis de non acceptation de certains caractères du genre "()-" .. Ou une erreur donnée si le mot ne commence pas par un underscore ou une lettre ...
Je suis conscient que j'ai un peu de mal à exprimer mon soucis clairement, mais je vous invite à regarder la pièce jointe qui peut être vous éclairera.
En résumé :
Le but de ce programme est de pouvoir créer des liste de choix dans des cellules qui soit en fonction des autres choix. (Exemple :"TV" ; "PANASONIC" ne doit pas proposer les mêmes choix que "RADIO" ; "PANASONIC").
Je vous remercies toutes et tous,
Valentin
Code:
Sub CreeListeBD()
colBD = 1
colListe = 8
Set f = Sheets("bd")
ligne = 1
f.Cells(ligne + 1, colListe).Resize(1000, 10).Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
mondico(c.Value) = c.Value
Next c
f.Cells(ligne, colListe) = "Liste"
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
ActiveWorkbook.Names.Add Name:="Liste", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
'---- niv 2,3,..
For niv = 2 To 3 ' adapter le nombre de niveaux
colBD = colBD + 1
colListe = colListe + 2
ligne = 1
For Each c In Range(f.Cells(2, colListe - 2), f.Cells(65000, colListe - 2).End(xlUp))
If c <> "" And c.Font.Bold <> True Then
Set mondico = CreateObject("Scripting.Dictionary")
For Each d In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
If d.Offset(, -1) = c Then mondico(d.Value) = d.Value
Next d
f.Cells(ligne, colListe) = c
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
ActiveWorkbook.Names.Add Name:=Replace(c, " ", "_"), RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
ligne = ligne + mondico.Count + 1
End If
Next c
Next niv
End Sub
Pièces jointes
Dernière édition: