Question sur un Module de Classe

IFFIC

XLDnaute Occasionnel
Bonsoir à ceux qui passeront par là.
Et Grand Merci à ceux qui par leur aide m'ont donné le Plaisir
de bidouiller en VBA.

1) Avec l'exemple ci-joint, je ne parviens pas à ce que les autres
labels récupèrent leur couleur initiale
2) J'aimerais remplacer "For Each" par un "i" excluant les deux
premiers Labels ainsi que les labels au-delà du septième.
(Par exemple)


Dans l'USF:

Option Explicit
Dim ACTION_SUR_LABELS(99) As New CHANGER_LES_COULEURS

Private Sub UserForm_Activate()

Dim SERIE_DE_LABELS As Control

Dim Qté As Byte

For Each SERIE_DE_LABELS In UserForm1.Controls

If TypeName(SERIE_DE_LABELS) = "Label" Then
Qté = Qté + 1
Set ACTION_SUR_LABELS(Qté).Les_Labels = SERIE_DE_LABELS
End If

Next SERIE_DE_LABELS

End Sub
'-----------------------------------------------------------------

Dans le module de Classe:

Public WithEvents Les_Labels As MSForms.Label

Private Sub Les_Labels_Click()

Les_Labels.BackColor = &HC0C000

(Les deux lignes ci-dessous, pour le test)
Worksheets("liste").Cells(1, 1).Value = Les_Labels.Name
Worksheets("liste").Cells(2, 1).Value = Right(Les_Labels.Name, 1)

End Sub

Je me vois parti sur une caisse de "If" sinon "Select Case" de deux pages..!

Je suis persuadé qu'il existe plus simple;
D'où ma question.

Merci d'avance, et bon Middle Week à tous.

IFFIC
 

Pièces jointes

  • CLASS.zip
    14.1 KB · Affichages: 20
  • CLASS.zip
    14.1 KB · Affichages: 19
  • CLASS.zip
    14.1 KB · Affichages: 19

MichelXld

XLDnaute Barbatruc
Re : Question sur un Module de Classe

Bonsoir cher Iffic

Tu peux tester cette procédure


Code:
'--------------------------------------
'A placer dans un module de classe nommé CHANGER_LES_COULEURS
Public WithEvents Les_Labels As MSForms.Label
Private Sub Les_Labels_Click()
    Dim Obj As Control
    
    For Each Obj In UserForm1.Controls
    
        If TypeName(Obj) = "Label" Then _
            Obj.Object.BackColor = &HFFFFFF
    Next Obj
    
    Les_Labels.BackColor = &HC0C000
    
End Sub
'--------------------------------------


Code:
'--------------------------------------
'A placer dans un module standard
Option Explicit
Public Collect As Collection
'--------------------------------------


Code:
'--------------------------------------
'Procédure du UserForm.
Option Explicit
Private Sub Label5_Click()
End Sub
Private Sub UserForm_Initialize()
    Dim SERIE_DE_LABELS As Control
    Dim Cl As CHANGER_LES_COULEURS
 
    Set Collect = New Collection
    For Each SERIE_DE_LABELS In Me.Controls
        If TypeName(SERIE_DE_LABELS) = "Label" Then
            'ajout de l'objet dans la classe
            Set Cl = New CHANGER_LES_COULEURS
            Set Cl.Les_Labels = SERIE_DE_LABELS
            Collect.Add Cl
        End If
    Next SERIE_DE_LABELS
End Sub
'--------------------------------------



Bon après midi
MichelXld
 
Dernière édition:

IFFIC

XLDnaute Occasionnel
Re : Question sur un Module de Classe

Bonjour, Michel

Encore Michel !!!!!!

Je vais être une nouvelle fois être un peu gèné de ne pas pouvoir renvoyer l'ascenseur.

Ton explication me semble (Elle l'est sûrement) bien plausible

A la limite de mon "Pigeomètre", mais n'est-il pas ainsi que l'on avance?

Merci Michel,

Plein de bonnes choses à toi pour le reste de la semaine

IFFIC
 

MichelXld

XLDnaute Barbatruc
Re : Question sur un Module de Classe

Rebonjour Iffic ...;o)

une autre version du module de classe sans boucle sur les Labels

Code:
'--------------------------------------
'A placer dans un module de classe nommé CHANGER_LES_COULEURS
Public WithEvents Les_Labels As MSForms.Label

Private Sub Les_Labels_Click()
    Dim Obj As Control
    
    If Not Cible Is Nothing Then _
        Cible.BackColor = &HFFFFFF
    
    Les_Labels.BackColor = &HC0C000
    Set Cible = Les_Labels
    
End Sub
'--------------------------------------


Et un ajout dans le module standard

Code:
Public Cible As MSForms.Label


Bon après midi
MichelXld
 

IFFIC

XLDnaute Occasionnel
Re : Question sur un Module de Classe

Cette fois: "Bonsoir" Michel.. T'as vu l'heure???

Je viens de lire ta nouvelle proposition...
Pépé va avoir la tête comme une lessiveuse:)

Par politesse je joins le résultat qui m'importait,
et que par ton aide, j'ai obtenu.

Je me penche maintenant sur ce que tu viens de me montrer.

(On va y arriver en deux lignes, n'est-il pas?)

Bonne soirée à toi Michel, et ainsi qu'à ceux qui passeront par là.

IFFIC
 

Pièces jointes

  • CLASS-Mich..zip
    14.3 KB · Affichages: 30

Discussions similaires

Réponses
29
Affichages
962

Statistiques des forums

Discussions
312 329
Messages
2 087 329
Membres
103 517
dernier inscrit
hbenaoun63