Les principes de base pour faire passer l'image du bouton à l'étiquette sont simples :
Capture1.Picture = btn1.picture
Le véritable casse-tête vient du fait qu'il n'est pas possible d'affecter le même morceau de code à plusieurs événements Button.Click en VBA. Ce n'est pas comme en VB où la syntaxe serait :
Sub MyRoutine(sender, <args>) Handles Button1.Click, Button2.Click...
En VBA, vous avez besoin de 36 routines _Click différentes, une pour chaque bouton. Mettez en place un compteur au niveau du module pour garder une trace de l'étiquette à laquelle vous voulez faire référence.
Dim counter As Integer
Private Sub UserForm_Activate()
counter = 1
End Sub
Private Sub btn1_Click()
If counter > 3 Then
counter = 1
End If
Controls("capture" & counter).Picture = btn1.Picture
counter = counter + 1
End Sub
Vous aurez besoin de 36 routines identiques à celle-ci, à l'exception du nom du bouton dans chaque routine. Heureusement, vous pouvez faire la plupart du temps du copier-coller.
Vous pouvez économiser quelques lignes de code en procédant de cette manière :
Private Sub btn1_Click()
Call CaptureImage(btn1.Name)
End Sub
Private Sub btn2_Click()
Call CaptureImage(btn2.Name)
End Sub
.
.
.
Private Sub CaptureImage(ByVal btnName As String)
If counter > 3 Then
counter = 1
End If
Controls("capture" & counter).Picture = Controls(btnName).Picture
counter = counter + 1
End Sub
mais vous vous retrouverez toujours avec 36 routines _Click qui appellent la sous-routine CaptureImage.