Bouton- Frame - Couleur

Bonjour a tous et a toutes

comme a chaque fois, c'est des soucis que je n'arrive pas a résoudre

j'ai réussi a faire de passage de souris sur les bouton a ce qu'il changent de couleur et reprenant la couleur initial des qu'il quite le bouton.

mon problème est des que j'utilise des frames ( 1 ou plusieurs) ca ne fonctionne plus comme il faut.

si quelqu'un a une solution

merci

Bonjour,

Je ne comprends pas car chez moi ça fonctionne très bien si tu sors de la frame

merci pour la réactivité

si tu met la souris sur un des boutons qui est dans le frame, il ne reprend la couleur initiale que quand la souris touche le userform.

si la souris reste sur le frame, ca ne fonctionne pas

a vous relire

Bonjour,

C'est parce que le code de "remise à zero" de la couleur des boutons : Private Sub UserForm_MouseMove n'est appelé que quand tu passes la souris sur l'userform… Directement !

Donc s'il y a une frame entre ta souris et le "fond" de l'userform tu ne déclenches pas, et donc le bouton reste coloré.

Pour contourner tu pourrais faire une autre classe générique qui contiendrait n'importe quel type de controle, et tu copierai le code de MouseMove dedans. Ainsi dès que ta souris change de contrôle (ou retourne sur l'UF) tu RAZ les couleurs des autres contrôles.

En fait tu pourrais faire une classe générique dans laquelle tu stockes 2 valeurs/paramètres pour chaque contrôle : sa couleur de "highlight" et sa couleur "normale".

Et dans l'event MouseMove de cette classe, tu boucles sur tous les autres controles de l'UF, tu les remets sur leurs valeurs de défaut, sauf celui courant qui lui passe en highlight.

Par contre pour faire cela tu auras besoin d'accéder à la liste des autres controles de l'UF, donc ou bien tu ajoutes en paramètre de classe l'UF "mère" ou bien tu récupères l'UF actif via un tour de passe passe (VBA.Userforms te renvoie la liste des userforms actifs).

Oups, je vais essayer de le faire, si je n'y arrive pas, je vous sollicite pour une aide, est ce possible,!!

Merci

Ci-joint une proposition pour illustrer ce que je voulais dire. On a une classe qui regroupe les differents types de controles (CtrlDeBase) et une classe qui fait le lien avec l'UF (optionnel mais ca rend le code plus propre dans certains cas).

14book3.xlsm (31.90 Ko)

Malheureusement on est obligé de passer par une classe un peu brouillon, la classe "CtrlDeBase" dans l'exemple, car j'ai découvert que le controle générique "MSForm.Control" n'a pas l'event MouseMove. Donc j'ai regroupé les différents controles que j'utilise dans 1 classe unique qui ne montre qu'un event que j'ai inventé : JeSuisSurvole, et comme ça je n'ai pas à me préoccuper de mon type de controle. La classe CtrlDeBase s'occupe de savoir quel type de controle on a en réalité, et de le colorier correctement.

re bonsoir

effectivement, et ca créer des scintillement

merci beaucoup

re bonsoir

effectivement, et ca créer des scintillement

merci beaucoup

Oui j'ai remarqué aussi. Mais selon moi c'est dû au fait que dans l'exemple que je t'ai proposé on a des couleurs aléatoires toutes différentes. Je suppose que si la frame et ses contrôles ont le même fond par exemple, ce n'est pas aussi visible.

bonjour

merci pour la reprise du file ( je suis toujours deçu pou essayer de trouver une solution simple)

je n'arrive pas a intégrer les frame dans un module de class

comme cela il y aurais ----> du genre for each Frame ......

je suis en train de chercher

merci pour celui qui donne une aide

Bonjour,

pour le premier problème :

Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim ctrl As Control
    Dim i As Integer

    ' Restaure la couleur originale des boutons lorsqu'on quitte la zone
    i = 1
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CommandButton Then
            ctrl.BackColor = OriginalColors(i) ' Restaure la couleur enregistrée
            i = i + 1
        End If
    Next ctrl
End Sub
Private Sub Frame2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim ctrl As Control
    Dim i As Integer

    ' Restaure la couleur originale des boutons lorsqu'on quitte la zone
    i = 1
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.CommandButton Then
            ctrl.BackColor = OriginalColors(i) ' Restaure la couleur enregistrée
            i = i + 1
        End If
    Next ctrl
End Sub

@ bientôt

LouReeD

merci beaucoup bigboss @LouReed et @Saboh12217

ma question est la suivante, si on a plusieur frame, on est obliger demettrele meme code pour toutes les fames, il n'y a pas de moyen pour rendre le frame dans un module de class, comme les commandebutton!!, et integre le doce dans le userform_initialize !!

merci

Bonsoir,

je dirais que si, mais j'avoue ne pas maitriser les modules de classe...
Mais ceci devrait être faisable, après il faut voir si la détection MouseMove existe en module de classe, car tous les évènements ne sont pas gérables de cette manière.

Vous avez combien de Frame, car il suffit de faire un copier coller et de modifier le numéro du frame... Ce n'est pas non plus insurmontable, non ?
Sinon de mon côté je vais déposer une application en validation auprès de Sébastien ! Merci encore à vous !

@ bientôt

LouReeD

Bonsoir,

votre fichier modifié :

@ bientôt

LouReeD

c'est exactement cela

merciiiiiiiiiiiiiiiiii

bonne chance, et beaucoup de download je te l'espere

Bonsoir,

merci de votre retour et de vos remerciements ET de vos encouragements !

@ bientôt

LouReeD

Pour info on peut "intégrer" le code de @LooReed dans un module de classe pour les frames. Le principe est exactement le même que le fichier que j'avais joint ou ta classe de bouton. Si j'ai bien compris le code de @LooReed, la différence est que la MAJ de la couleur des contrôles au niveau des frames ne se fait que pour les contrôles *dans* la frame, pour éviter le scintillement dans les autres frames. On pourrait l'implémenter de différentes façons mais le principe est malin !

Bonne journée.

Bonjour,

Mon dernier fichier est en module de classe me semble t il, non ?

@ bientôt

LouReeD

Bonjour,

Mon dernier fichier est en module de classe me semble t il, non ?

@ bientôt

LouReeD

Heuuu oui désolé, j'avais simplement lu la discussion. C'est exactement ce à quoi je pensais 👍

"saboh12617 en a rêvé, LouReeD l'a fait !"

Je plaisante !

Bonne soirée @ vous tous.

@ bientôt

LouReeD

Rechercher des sujets similaires à "bouton frame couleur"