Voici donc l'idée du message précédent !
Il n'y a plus qu'un seul tableau de couleurs d'origine pour les boutons, il s'agrandi et s'incrémente avec la variable CptBouton.
on garde les différentes classes bouton afin de réagir en fonction du contrôle survolé, mais ces tableaux s'agrandissent avec la même variable CptBouton, il y a donc des "trous" dedans mais ce n'est pas grave...
Lors de l'ouverture du USF pour les boutons "tous types", on inscrit dans le Tag son nom "virgule" son numéro (CptBouton).
Lorsque l'on met au rouge ou au vert un bouton, on récupère ce Tag dans la variable QuelBouton.
Lorsque le code de mise à jour des couleurs est lancé, on SPLIT la variable QuelBouton sur la virgule, on obtien alors et le nom du contrôle concerné et l'index de sa couleur d'origine dans la variable Tablo(0) et Tablo(1)
Et voilà, on ne modifie en couleur d'origine uniquement le contrôle dont sa couleur avait changé. On n'a plus de scintillement...
et les codes :
du module :
Public ButtonEvents() As ClsButtonEvents
Public FrameEvt() As FrameEvent
Public MultiPageEvt() As MultiPageEvent
Public TabStripEvt() As TabStripEvent
Public ToggleButtonEvt() As ToggleButtonEvent
Public OriginalColors() As Long
Public QuelBouton As String
Sub Bouton()
UserForm1.Show
End Sub
Sub RemiseDesCouleurs()
Dim Tablo
If QuelBouton <> "" Then
' on récupère le nom du bouton et sa position dans le tableau
Tablo = Split(QuelBouton, ",")
UserForm1.Controls(Tablo(0)).BackColor = OriginalColors(Tablo(1))
' on vide la variable QuelBouton vu qu'il n'y a plus de bouton dont la couleur à changer
QuelBouton = ""
End If
End Sub
du USF :
Private Sub UserForm_Initialize()
Dim Ctrl As Control, CptBouton As Integer, CptFram As Integer, CptMultiPage As Integer, CptTabStrip As Integer
On Error Resume Next 'Ignore les erreurs
CptBouton = 1: CptFram = 1: CptMultiPage = 1: CptTabStrip = 1
' on boucle une seule fois sur tous les contrôles
For Each Ctrl In UserForm1.Controls
Select Case TypeName(Ctrl)
Case "Frame"
ReDim Preserve FrameEvt(1 To CptFram)
Set FrameEvt(CptFram) = New FrameEvent
Set FrameEvt(CptFram).FrameLRD = Ctrl
CptFram = CptFram + 1
Case "MultiPage"
ReDim Preserve MultiPageEvt(1 To CptMultiPage)
Set MultiPageEvt(CptMultiPage) = New MultiPageEvent
Set MultiPageEvt(CptMultiPage).MultiPageLRD = Ctrl
CptMultiPage = CptMultiPage + 1
Case "TabStrip"
ReDim Preserve TabStripEvt(1 To CptTabStrip)
Set TabStripEvt(CptTabStrip) = New TabStripEvent
Set TabStripEvt(CptTabStrip).TabStripLRD = Ctrl
CptTabStrip = CptTabStrip + 1
Case "CommandButton"
ReDim Preserve ButtonEvents(1 To CptBouton)
ReDim Preserve OriginalColors(1 To CptBouton)
Set ButtonEvents(CptBouton) = New ClsButtonEvents
Set ButtonEvents(CptBouton).ButtonLRD = Ctrl
Ctrl.Tag = Ctrl.Name & "," & CptBouton
OriginalColors(CptBouton) = Ctrl.BackColor
CptBouton = CptBouton + 1
Case "ToggleButton"
ReDim Preserve ToggleButtonEvt(1 To CptBouton)
ReDim Preserve OriginalColors(1 To CptBouton)
Set ToggleButtonEvt(CptBouton) = New ToggleButtonEvent
Set ToggleButtonEvt(CptBouton).ToggleButtonLRD = Ctrl
Ctrl.Tag = Ctrl.Name & "," & CptBouton
OriginalColors(CptBouton) = Ctrl.BackColor
CptBouton = CptBouton + 1
End Select
Next
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
RemiseDesCouleurs
End Sub
J'ai également ajouté aléatoirement "LRD" aux modules de classes Button car ces dernières "embarques" un paramètre du même nom (Button As Integer) et dans VBA il faut éviter les homonymes...
Public WithEvents ButtonLRD As MSForms.CommandButton
Private Sub ButtonLRD_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.ButtonLRD.BackColor = RGB(255, 0, 0) ' Rouge au passage de la souris
QuelBouton = Me.ButtonLRD.Tag
End Sub
Private Sub ButtonLRD_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.ButtonLRD.BackColor = RGB(0, 255, 0) ' Vert lors du clic
QuelBouton = Me.ButtonLRD.Tag
End Sub
Public WithEvents ToggleButtonLRD As MSForms.ToggleButton
Private Sub ToggleButtonLRD_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.ToggleButtonLRD.BackColor = RGB(255, 0, 0) ' Vert lors du clic
QuelBouton = Me.ToggleButtonLRD.Tag
End Sub
Private Sub ToggleButtonLRD_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Me.ToggleButtonLRD.BackColor = RGB(0, 255, 0) ' Vert lors du clic
QuelBouton = Me.ToggleButtonLRD.Tag
End Sub
@ bientôt
LouReeD