Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion BenHarber
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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 ?
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…