Private sub sur des bouton perso appelé dans userform_initialize
Résolu
Orbital38
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
Orbital38 Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
Orbital38 Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Désolé pour le titre à rallonge c'est difficile d'exposer le problème.
Bon déjà je me complique peut-être la vie et je pourrais juste implanter des boutons persos comme ça dans mon userform mais je suis avide de connaissance.
Qu'est-ce que j'appelle "bouton perso" ? 2 images superposées (une visible en arrière plan, une invisible en premier plan) + du texte centré au même endroit et par-dessus les 2 images. J'utilise les private sub mousemove sur l'image visible et sur le userform pour rendre visible l'image qui était invisible et pour la re-rendre invisible.
Image1 et Image2 constituent un même bouton.
Avant dans mon UserForm_initialize je mets ça pour automatiser le centrage des 2 images + le texte pour un même bouton (2 images + label qui sont fait dans le userform graphique avec la boite à outils) :
Seulement voilà je voudrais simplifier tout ça et me créer une fonction "bouton" pour ajouter 2 images et un label dans le userform :
Seulement voilà, quand j'appelle le bouton avec l'ID 5 par exemple (donc je crée Image9, Image10, Label10) :

Tout marche bien pour les 3 premiers boutons car j'ai rajouter les images et les labels avec la boite à outils du userform. Mais pour test1 et test2 je créer tout avec du code et là ça ne marche plus.
Si quelqu'un à une solution/explication je suis preneur. ^^
Merci d'avance.
Edit :
J'oubliais aussi : dans ma private sub userform_mousemove, la ligne pour rendre à nouveau invisible l'image au premier plan me fait planter la macro. Donc je met la ligne en remarque, mais le mousemove sur l'image 9 (celle qui est visible) ne marche quand même pas :
Désolé pour le titre à rallonge c'est difficile d'exposer le problème.
Bon déjà je me complique peut-être la vie et je pourrais juste implanter des boutons persos comme ça dans mon userform mais je suis avide de connaissance.
Qu'est-ce que j'appelle "bouton perso" ? 2 images superposées (une visible en arrière plan, une invisible en premier plan) + du texte centré au même endroit et par-dessus les 2 images. J'utilise les private sub mousemove sur l'image visible et sur le userform pour rendre visible l'image qui était invisible et pour la re-rendre invisible.
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Image2.Visible = True End Sub Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.Image2.Visible Then Me.Image2.Visible = False End Sub
Image1 et Image2 constituent un même bouton.
Avant dans mon UserForm_initialize je mets ça pour automatiser le centrage des 2 images + le texte pour un même bouton (2 images + label qui sont fait dans le userform graphique avec la boite à outils) :
Image1.top = y_c1 - Image1.Height / 2 Image1.left = x_c - Image1.Width / 2 Image2.top = y_c1 - Image2.Height / 2 Image2.left = x_c - Image2.Width / 2 Label2.top = y_c1 - Label2.Height / 2 Label2.left = x_c - Label2.Width / 2
Seulement voilà je voudrais simplifier tout ça et me créer une fonction "bouton" pour ajouter 2 images et un label dans le userform :
Private Function bouton(K As Integer, Nom_bouton As String, top As Double, left As Double) Dim lblCs(200) As MSForms.Label Dim imgCs(200) As MSForms.Image Dim L, M As Integer L = K * 2 - 1 M = K * 2 Set imgCs(L) = Me.Controls.Add("Forms.Image.1", "Image" & L) 'image foncée, toujours visible, en arrière plan With imgCs(L) .Name = "Image" & L .top = top .left = left .BackStyle = fmBackStyleTransparent .BorderStyle = fmBorderStyleNone .Picture = LoadPicture("D:\bouton1 pour userform.gif") .AutoSize = True .Visible = True End With Set imgCs(M) = Me.Controls.Add("Forms.Image.1", "Image" & M) 'image claire, invisible, en premier plan With imgCs(M) .Name = "Image" & M .top = top .left = left + 10 .BackStyle = fmBackStyleTransparent .BorderStyle = fmBorderStyleNone .Picture = LoadPicture("D:\bouton2 pour userform.gif") .AutoSize = True .Visible = False End With Set lblCs(M) = Me.Controls.Add("Forms.Label.1", "Label" & M) With lblCs(M) .Name = "Label" & M .top = top .left = left .BackStyle = fmBackStyleTransparent .BorderStyle = fmBorderStyleNone .Caption = Nom_bouton .Font.Name = "Tahoma" .Font.Size = 10 .Font.Bold = True .ForeColor = Val("&H" & "FFFFFF") '.Backcolor ="vbBlue" .AutoSize = True End With End Function
Seulement voilà, quand j'appelle le bouton avec l'ID 5 par exemple (donc je crée Image9, Image10, Label10) :
bouton 5, "test 2", 230, 20, les private sub de mousemove ne fonctionnent plus pour ces boutons.

Tout marche bien pour les 3 premiers boutons car j'ai rajouter les images et les labels avec la boite à outils du userform. Mais pour test1 et test2 je créer tout avec du code et là ça ne marche plus.
Si quelqu'un à une solution/explication je suis preneur. ^^
Merci d'avance.
Edit :
J'oubliais aussi : dans ma private sub userform_mousemove, la ligne pour rendre à nouveau invisible l'image au premier plan me fait planter la macro. Donc je met la ligne en remarque, mais le mousemove sur l'image 9 (celle qui est visible) ne marche quand même pas :
Private Sub Image9_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Image10.Visible = True End Sub Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.Image2.Visible Then Me.Image2.Visible = False If Me.Image4.Visible Then Me.Image4.Visible = False If Me.Image6.Visible Then Me.Image6.Visible = False 'If Me.Image8.Visible Then Me.Image8.Visible = False 'If Me.Image10.Visible Then Me.Image10.Visible = False End Sub
A voir également:
- Private sub sur des bouton perso appelé dans userform_initialize
- Navigation in private - Guide
- Bouton reinitialisation pc - Guide
- Appelé en inconnu - Guide
- Diagnostic bouton photo - Accueil - Outils
- Comment faire une capture d'écran sur un samsung sans bouton ? - Guide
1 réponse
Bon, j'arrive à faire marcher un bouton avec ma Function Bouton avec un WithEvents :
+
Et à la fin avec le MouseMove :
sauf qu'il me le fait sur mon dernier bouton que je créer avec ma fonction (logique).
J'aimerai savoir comment définir mes images.
Avant cette modif' j'avais :
Là je n'ai pas le withevents mais j'ai un moyen de différencier chaque controls.
Etant novice en VB je voulais savoir si il y avait un moyen de définir des variables dans une boucle et créer de cette manière oImage1, oImage2, oImage3, etc....
Merci
Edit :
Je ne sais pas si ça peut être ça mais est-ce que je dois créer un module de classe pour faire mes boutons ?
En fait je dois créer des objets Imagei où i s'incrémente à chaque création de bouton afin de l'utilise dans les private sub mousemove. Sauf que ces Imagei doivent être définies avec un WithEvents.
Du coup je ne sais absolument pas quoi faire.
J'arrive à bidouiller VBA mais là c'ets la première fois que je bloque autant. J'ai besoin de conseils et d'aide. x)
Public WithEvents oImage1 As MSForms.Image Public WithEvents oImage2 As MSForms.Image Public WithEvents oLabel As MSForms.Label
+
Set oImage1 = Me.Controls.Add("Forms.Image.1", "Image" & L) With oImage1dans ma fontion bouton.
Et à la fin avec le MouseMove :
Private Sub oImage1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) oImage2.Visible = True End Sub Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Me.oImage2.Visible Then Me.oImage2.Visible = False End Sub
sauf qu'il me le fait sur mon dernier bouton que je créer avec ma fonction (logique).
J'aimerai savoir comment définir mes images.
Avant cette modif' j'avais :
Dim lblCs(200) As MSForms.Label Dim ImgCs(200) As MSForms.Image
Là je n'ai pas le withevents mais j'ai un moyen de différencier chaque controls.
Etant novice en VB je voulais savoir si il y avait un moyen de définir des variables dans une boucle et créer de cette manière oImage1, oImage2, oImage3, etc....
Merci
Edit :
Je ne sais pas si ça peut être ça mais est-ce que je dois créer un module de classe pour faire mes boutons ?
En fait je dois créer des objets Imagei où i s'incrémente à chaque création de bouton afin de l'utilise dans les private sub mousemove. Sauf que ces Imagei doivent être définies avec un WithEvents.
Du coup je ne sais absolument pas quoi faire.
J'arrive à bidouiller VBA mais là c'ets la première fois que je bloque autant. J'ai besoin de conseils et d'aide. x)