Bonjour A tous,

Mon projet se compose actuellement:

- une ComboBox (alimentée par le nom des pages de mon projet - ACTIVITES PROFESSIONNELLES),

- une TextBox (alimentée par l'item sélectionné depuis la Combobox),

- une ListBox (alimentée par une Banque de Donnée conditionnée par l'activité sélectionnée - RISQUES PROFESSIONNELS),

- 24 icônes représentant chacune un risque professionnel,

- 24 images vierges qui se chargent lorsque le nom du risque apparaît dans la ListBox.

L'objectif est d'obtenir une fiche de risques dynamique par activité.

Nom : aideforum.jpg
Affichages : 143
Taille : 509,0 Ko

MON PROBLEME:

Lorsque je sélectionne une activité comportant moins de risques que d'images prévues par mon code, un message d'erreur apparaît:

"Erreur d'exécution '381':
Impossible de lire la propriété List. Index de table de propriétés non valide."

ci dessous le code mis en cause:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub ComboBox1_Click()
 
Me.TextBox1 = ComboBox1
Me.ListBox1.Clear
 
Set f = Sheets(Me.TextBox1.Text)
  Set MonDico = CreateObject("Scripting.Dictionary")
  bd = f.Range("B9:B" & f.[F65000].End(xlUp).Row)  ' tableau bd(n,1) pour rapidité
    For i = LBound(bd) To UBound(bd)
   If bd(i, 1) <> "" Then MonDico(bd(i, 1)) = ""
  Next i
  Me.ListBox1.List = MonDico.keys
 
 '--avec tri
  temp = MonDico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ListBox1.List = temp
 
With ListBox1
 
 Image1.Picture = Controls("Risque" & .List(.ListIndex, 0)).Picture
 Image2.Picture = Controls("Risque" & .List(.ListIndex + 1, 0)).Picture
 Image3.Picture = Controls("Risque" & .List(.ListIndex + 2, 0)).Picture
 Image4.Picture = Controls("Risque" & .List(.ListIndex + 3, 0)).Picture
 Image5.Picture = Controls("Risque" & .List(.ListIndex + 4, 0)).Picture
 Image6.Picture = Controls("Risque" & .List(.ListIndex + 5, 0)).Picture
 Image7.Picture = Controls("Risque" & .List(.ListIndex + 6, 0)).Picture
 Image8.Picture = Controls("Risque" & .List(.ListIndex + 7, 0)).Picture
 Image9.Picture = Controls("Risque" & .List(.ListIndex + 8, 0)).Picture
 Image10.Picture = Controls("Risque" & .List(.ListIndex + 9, 0)).Picture
 Image11.Picture = Controls("Risque" & .List(.ListIndex + 10, 0)).Picture
 Image12.Picture = Controls("Risque" & .List(.ListIndex + 11, 0)).Picture
 Image13.Picture = Controls("Risque" & .List(.ListIndex + 12, 0)).Picture
 Image14.Picture = Controls("Risque" & .List(.ListIndex + 13, 0)).Picture
 Image15.Picture = Controls("Risque" & .List(.ListIndex + 14, 0)).Picture
End With
End Sub
Il me semble que je pourrais optimiser ces lignes de code en une ligne générique sous conditions de "remplissage" de l'index de la ListBox, mais toutes mes tentatives échouent!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Image1.Picture = Controls("Risque" & .List(.ListIndex, 0)).Picture
Une âme charitable aurait-elle une piste à me proposer?

Merci!