2 votes

Capture d'images à l'intérieur d'une étiquette

J'ai un userForm qui consiste en quelques boutons avec des images. J'ai ensuite trois étiquettes vierges et j'aimerais que lorsque je clique sur un bouton / une image, l'image s'affiche dans la première étiquette. Ensuite, si je clique sur un autre bouton/image, la deuxième étiquette est l'image et la même chose pour la troisième.

36 boutons étiquetés btn1 à btn36 Trois étiquettes vierges nommées capture1 capture2 capture3

Je ne sais pas si je dois publier d'autres informations ou non.

J'ai besoin d'aide pour écrire le code (VBA).

3voto

Stewbob Points 11432

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X