OVH Cloud OVH Cloud

Accéder à l'objet précédent via module de classe

5 réponses
Avatar
Pierre Archambault
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque l'utilisateur
clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager clique
sur un autre Label, le précédent revienne à l'état original (Raised) tandis
que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label précédent.

Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre

5 réponses

Avatar
David B.
Salut,

Et pourquoi tu ne mettrai pas en variable statique l'objet précédent ?

Avant d'enfoncer ton bouton en cours, tu désenfonce le bouton mis en place
dans l'élément statique, tu enfonce ensuite le bouton en cours et tu met le
bouton en cours dans l'objet statique.

C'est peut une soluce comme une autre ?

@+
David B.

"Pierre Archambault" a écrit dans le
message de news: ATctf.35127$
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque l'utilisateur
clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager clique
sur un autre Label, le précédent revienne à l'état original (Raised)
tandis
que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label précédent.

Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre





Avatar
Pierre Archambault
Merci David

C'est justement ce que j'essaie de faire... Tout comme je le fesais dans la
version sans module de classe.

Mais ça ne marche pas.

Voici le code que j'utilise dans le module de classe :
-------------------------------------------------------------
Private Sub MesLabels_Click()
Static AncLabel As Label

If MesLabels.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

If AncLabel Is Nothing Then
'Ne rien faire
Else
AncLabel.SpecialEffect = fmSpecialEffectRaised
End If

MesLabels.SpecialEffect = fmSpecialEffectSunken
Set AncLabel = MesLabels

End Sub
-------------------------------------------------------------


"David B." a écrit dans le message de
news:OWtQz%
Salut,

Et pourquoi tu ne mettrai pas en variable statique l'objet précédent ?

Avant d'enfoncer ton bouton en cours, tu désenfonce le bouton mis en
place

dans l'élément statique, tu enfonce ensuite le bouton en cours et tu met
le

bouton en cours dans l'objet statique.

C'est peut une soluce comme une autre ?

@+
David B.

"Pierre Archambault" a écrit dans le
message de news: ATctf.35127$
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque
l'utilisateur


clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager
clique


sur un autre Label, le précédent revienne à l'état original (Raised)
tandis
que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label
précédent.



Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre









Avatar
Michel Pierron
Bonjour Pierre;
Dans ton module UserForm:
Option Explicit

Private Sub UserForm_Initialize()
Dim Ctl As Control, i As Byte
For Each Ctl In Me.Controls
If Left(Ctl.Name, 5) = "Label" Then
i = Val(Mid(Ctl.Name, 6))
ReDim Preserve Lbl(1 To i)
Set Lbl(i).lblGroup = Ctl
End If
Next Ctl
End Sub

Dans ton module Standard:
Option Explicit
Public Lbl() As New lblClass

Dans ton module de classe (lblClass):
Option Explicit
Public WithEvents lblGroup As MSForms.Label

Private Sub lblGroup_Click()
Dim i As Byte
For i = 1 To UBound(Lbl)
UserForm1.Controls("Label" & i).SpecialEffect = 1
Next i
lblGroup.SpecialEffect = 2
End Sub

Happy New year;
MP

"Pierre Archambault" a écrit dans le
message de news: ATctf.35127$
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque l'utilisateur
clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager clique
sur un autre Label, le précédent revienne à l'état original (Raised)
tandis

que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label précédent.

Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre





Avatar
Michel Pierron
Re Pierre;
Si tu souhaites réellement accéder à l'objet précédent:
Dans ton module UserForm:
Option Explicit
Private Lbl() As New lblClass

Private Sub UserForm_Initialize()
lblName = ""
Dim Ctl As Control, i As Byte
For Each Ctl In Me.Controls
If Left(Ctl.Name, 5) = "Label" Then
i = Val(Mid(Ctl.Name, 6))
ReDim Preserve Lbl(1 To i)
Set Lbl(i).lblGroup = Ctl
End If
Next Ctl
End Sub

Dans ton module standard:
Option Explicit
Public lblName As String

Dans ton module de classe(lblClass):
Option Explicit
Public WithEvents lblGroup As MSForms.Label

Private Sub lblGroup_Click()
If Len(lblName) Then UserForm1.Controls(lblName).SpecialEffect = 1
lblGroup.SpecialEffect = 2
lblName = lblGroup.Name
End Sub

MP

"Pierre Archambault" a écrit dans le
message de news: ATctf.35127$
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque l'utilisateur
clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager clique
sur un autre Label, le précédent revienne à l'état original (Raised)
tandis

que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label précédent.

Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre





Avatar
Pierre Archambault
Merci Michel

Bonne année, santé, prospérité, tout ce que tu désires.

Pierre

"Michel Pierron" a écrit dans le message de
news:%
Re Pierre;
Si tu souhaites réellement accéder à l'objet précédent:
Dans ton module UserForm:
Option Explicit
Private Lbl() As New lblClass

Private Sub UserForm_Initialize()
lblName = ""
Dim Ctl As Control, i As Byte
For Each Ctl In Me.Controls
If Left(Ctl.Name, 5) = "Label" Then
i = Val(Mid(Ctl.Name, 6))
ReDim Preserve Lbl(1 To i)
Set Lbl(i).lblGroup = Ctl
End If
Next Ctl
End Sub

Dans ton module standard:
Option Explicit
Public lblName As String

Dans ton module de classe(lblClass):
Option Explicit
Public WithEvents lblGroup As MSForms.Label

Private Sub lblGroup_Click()
If Len(lblName) Then UserForm1.Controls(lblName).SpecialEffect = 1
lblGroup.SpecialEffect = 2
lblName = lblGroup.Name
End Sub

MP

"Pierre Archambault" a écrit dans le
message de news: ATctf.35127$
Bonjour à tous,

J'ai un UserForm qui contient 20 Labels qui doivent réagir à l'événement
Click. Tous ces Labels ont l'effet spécial "Raised". Lorsque
l'utilisateur


clique sur un des Labels, ce dernier s'enfonce comme un bouton "Sunken".
Cela fonctionne sans problème mais je veux qu'aussitôt que l'usager
clique


sur un autre Label, le précédent revienne à l'état original (Raised)
tandis

que le Label actuel s'enfonce "Sunken".

J'avais d'abord programmé chacun des Labels pour obtenir l'effet désiré:
Dans le module du UserForme:

Public Objet As Control

Private Sub LabelA1_Click()
Set Objet = LabelA1
Call EnfoncerBouton
End Sub

Puis une procédure pour passer de "Raised" à "Sunken":

Public Sub EnfoncerBouton()
Static ObjetPréc As Control

If Objet.SpecialEffect = fmSpecialEffectSunken Then Exit Sub

Objet.SpecialEffect = fmSpecialEffectSunken

If ObjetPréc Is Nothing Then
'Ne rien faire
Else
ObjetPréc.SpecialEffect = fmSpecialEffectRaised
End If
Set ObjetPréc = Objet

End Sub

Mais voilà, si j'utilise un module de classe pour arriver aux mêmes
résultat, cela ne fonctionne que pour le Label sur lequel l'utilisateur
clique. Impossible de faire reprendre l'état "Raised" au Label
précédent.



Si quelqu'un a une idée, je vous en remercie à l'avance.

Pierre