Un module de classe peut-il fonctionner pour plusieurs usf ?

BenHarber

XLDnaute Occasionnel
Bonsoir le Forum,
Je me lance dans les modules de classe, mais c'est pas gagné...

Voilà mon pb :
J'ai un fichier avec 2 usf (usf1 et usf2) qui contiennent chacun de nombreux combobox (Oui/Non).

Le principe est : si je passe un combo à ''Oui'', je rend accessible une zone de texte attenante (''txtObj+1 n°'') . Si je choisis ''Non'' cela la rend inaccessible.
Derrière chaque Usf j'ai écrit :
Private cboUsf() As New RegptEvent

Dans le module de classe créé (''RegptEvent''), j'ai écrit :
Private cboUsf() As New RegptEvent

Private Sub cboUsf_Change()
Dim m As Byte
m = cboUsf.Tag

If cboUsf.Value = "Oui" Then
'A ce niveau, si j'indique un nom d'usf précis (usf1) : tout se passe bien
usf1.Controls("txtObj" & cboUsf.Tag).Enabled = True

'Mais ce que je souhaiterais, c'est avoir un code générique (dans le même module de classe) qui soit appelé quel que soit l'usf utilisé (usf1 ou usf2).
'Savez-vous si c'est possible ?

Pour info, j'ai essayé :
Me.Controls("txtObj" & cboUsf.Tag).Enabled = True : ça plante...
Puis, j'ai essayé de déclarer une variable publique (à l'initialisation de l'usf utilisé : UsfEnCrs = Me.Name) et j'ai écris :
usfEnCrs.Controls("txtObj" & cboUsf.Tag).Enabled = True : ça plante...
ou
UserForm(usfEnCrs).Controls("txtObj" & cboUsf.Tag).Enabled = True : ça plante...
ou
UserForms(usfEnCrs).Controls("txtObj" & cboUsf.Tag).Enabled = True : ça plante...

Quelqu'un aurait-il une idée de code à saisir ? Ou peut-être que ce n'est pas possible ?

Merci d'avance 1) à ceux qui ont lu ce post jusqu'au bout... 2) à tout ceux qui auront des sugestions à me proposer : je suis preneur !

Cordialement,
BenHarber
 

laurent950

XLDnaute Barbatruc
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

Bonsoir,

il ne faut pas crée l'objet dans le module de class mais plutot dans le main
Private cboUsf As New RegptEvent ' sans les parenthése car ces un objet dans le module uniquement

laurent
 

BenHarber

XLDnaute Occasionnel
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

Bonsoir Laurent,
Merci pour ta réponse.

En fait, je me suis emmelé les pinceaux : je crée bien l'objet dans le main [Private cboUsf() As New RegptEvent], et dans le module de classe : Public WithEvents cboUsf As MSForms.ComboBox

Le ''cboUsf()'' avec parenthèses car c'est une variable tableau que j'initialise dans une boucle en fonction du chiffre que je paramètre dans le Tag du combo, comme suit :

For Each CtrlDeUsf In Me.Controls 'Boucle sur tous les contrôles de l'usf…
If TypeOf CtrlDeUsf Is MSForms.ComboBox Then
i = CtrlDeUsf.Tag
'initialisa° pr Module de classe
ReDim Preserve cboUsf(1 To i)
Set cboUsf(i).cboUsf = CtrlDeUsf
Ainsi :
cboUsf1= 1er combo de l'usf
cboUsf2= 2d combo de l'usf
cboUsf3= 3ème combo de l'usf
...etc....

Quelqu'un a-t-il une autre idée ?
 

BenHarber

XLDnaute Occasionnel
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

Bonjour Laëtitia,
Tu as 1000 fois raison : des petits exemples valent mieux qu'une longue explication...
cf. fichier ci-joint (que j'ai simplifié au maximum).

Merci pour ta collaboration.
 

Pièces jointes

  • ExprDL.xls
    53.5 KB · Affichages: 49
  • ExprDL.xls
    53.5 KB · Affichages: 48
  • ExprDL.xls
    53.5 KB · Affichages: 46

laetitia90

XLDnaute Barbatruc
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

re,
un exemple avec ton code ..comme je comprends action sur les combos enabled sur textbox seulement si tag=1
 

Pièces jointes

  • clas.xls
    57 KB · Affichages: 49
  • clas.xls
    57 KB · Affichages: 44
  • clas.xls
    57 KB · Affichages: 50

Bebere

XLDnaute Barbatruc
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

bonjour BenHarber,Laetitia
avec une variable public pour déclarer l'userform actif
 

Pièces jointes

  • ExprDL.xls
    67.5 KB · Affichages: 68
  • ExprDL.xls
    67.5 KB · Affichages: 70
  • ExprDL.xls
    67.5 KB · Affichages: 72

BenHarber

XLDnaute Occasionnel
Re : Un module de classe peut-il fonctionner pour plusieurs usf ?

Bonjour à Tous,
Nickel-chrome, toutes les solutions fonctionnent : merci beaucoup !

J'ai repris celle de Bebere dont l'esprit se rapprochait le plus de ce que je cherchait : déclarer une variable publique sur l'objet userform et l'utiliser dans mon module de classe.

C'est étrange comme la solution semble évidente...une fois qu'on vous la servie toute cuite sur un plateau !

@+
BH
 

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 107
dernier inscrit
cdel