Je travaille actuellement sur la création d'une base de
données sous la forme de fiches (feuilles d'un même
classeur).
Pour celà j'ai créé un premier UserForm qui me permet
d'enregistrer des données et qui fonctionne normalement. A
chaque enregistrement correspond un code (ex : toto), une
nouvelle feuille étant nommée de ce code automatiquement.
J'aimerai maintenant créer un autre UserForm pour pouvoir
modifier des données déjà enregistrées.
Mon souci peut être illustré par l'exemple suivant :
un enfant Toto est inscrit à 3 activités extra-scolaires,
à l'enregistrement, on avait donc un code "Toto" auquel
correspondent 3 cellules dans une feuille nommée "toto"
(ces trois cellules ont les mêmes références dans toutes
les feuilles A1, A2 et A3). A la modification, je
souhaiterai que lorsque l'utilisateur choisira "toto" dans
le ListBox, qu'un autre ListBox correspondant aux
activités ait pour source les 3 cellules de la feuille
toto et affiche donc les 3 activités.
Il faudrait donc que dès que l'utilisateur choisit toto,
une procédure retrouve la feuille ainsi nommée dans le
classeur actif et établisse les 3 cellules comme source du
ListBox.
j'espère avoir été claire
Merci
Barbara
Une solution pourrait être de remplir "dynamiquement" une ListBox2 en fonction
de l'entrée sélectionnée dans la ListBox1.
Par ex, sur ton premier Userform place côte à côte deux ListBox. La Listbox1
pour afficher les noms des enfants, la ListBox2 pour afficher leurs activités.
La ListBox1 peut être remplie dans l'événement Initialize du UserForm :
Private Sub UserForm_Initialize()
For i = 1 To Sheets.Count
'ajoute comme entrée le nom des feuilles du classeur (=enfants)
ListBox1.AddItem Sheets(i).Name
Next
ListBox1.ListIndex = 0
End Sub
Ensuite, l'affichage dans la ListBox2 est modifié en fonction du changement de
l'entrée sélectionnée dans ListBox1. Tu peux utiliser pour ça une des deux
méthodes suivantes :
'modifier la propriété RowSource
Private Sub ListBox1_Change()
ListBox2.RowSource = ""
ListBox2.RowSource = _
ListBox1.List(ListBox1.ListIndex) & "!" & _
Sheets(ListBox1.List(ListBox1.ListIndex)).Range("A1:A3").Address
End Sub
'utiliser la méthode AddItem
Private Sub ListBox1_Change()
ListBox2.Clear
For i = 1 To 3
ListBox2.AddItem _
Sheets(ListBox1.List(ListBox1.ListIndex)).Range("A" & i).Value
Next
End Sub
FS
--
Frédéric Sigonneau [né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Barb a écrit :
Une habitude... J'aime bien travailler avec les tableaux. Je trouve qu'on
maîtrise bien ce qu'on fait, même si, dans ce cas, ça donne une syntaxe assez
malcommode à lire :-)
FS
--
Frédéric Sigonneau [né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Pascal Engelmajer a écrit :