premier pas dans les modules de classe

francoisC

XLDnaute Junior
Bonjour à vous et merci pour votre attention.

J'ai userform avec 12 Labels et 12 combobox
J'aimerais, en cliquant sur l'un des labels (mois)
- que la feuille correspondante s'active et
- que le combobox aligné avec le label devienne visible (initialement invisible) et se charge de la liste des prénoms dans la feuille du mois choisi.

j'ai une tentative mais sans résultat.

Merci encore. J’espère que cet exemple me permettra de comprendre les modules de classes qui me paraissent inévitables pour un projet que je dois mener.
 

Pièces jointes

  • Classeur.xlsm
    25.7 KB · Affichages: 36
  • Classeur.xlsm
    25.7 KB · Affichages: 40

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Bonjour.

Compilez votre projet: Erreur de compilation: afficheFeuille: Sub ou Function non définie.
Et effectivement il n'y a aucune procédure Public (ni assumée tel) de ce nom dans aucun module standard.
Il en existe bien une dans un module objet (l'Userform) mais ce n'en serait même pas une méthode vu qu'elle y est Private. Et ce ne saurait être un évènement non plus (pour devancer votre question, vu qu'une telle procédure peut, elle, être Private) vu qu'elle n'est déclarée nulle part comme tel ni invoquée par un RaiseEvent.
Edit: vu ?…

Il y a un autre truc important qui ne va pas : Un tableau LB() As New ClasseL qui sera détruit après exécution de la Sub UserForm_initialize parce que (pour éviter à nouveau "vu que") c'en est une variable locale et non globale à l'UserForm.
 
Dernière édition:

francoisC

XLDnaute Junior
Re : premier pas dans les modules de classe

Ok dans ma précipitation j'ai omis de retirer du code inutile ou de montrer ce que j’espèrais.

Voilà le nouveau classeur avec un exemple de ce que j'attends mais d'une manière moins rébarbative que celle qui se trouve dans le classeur joint. (Private Sub Label1_Click())

Merci
 

Pièces jointes

  • Classeur.xlsm
    30.8 KB · Affichages: 36
  • Classeur.xlsm
    30.8 KB · Affichages: 34

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Entendons nous bien. Vous faites vos premier pas dans les modules de classe. Vous voulez apprendre. Ce n'est donc pas une solution toute faite que vous voulez, mais que je vous dise ce qui ne va pas dans ce que vous essayez.
Dans le dernier classeur joint il y a en gros les mêmes erreurs que le premier, dont un tableau LB qui n'est pas global.
 

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Signifie un tableau déclaré dans une procédure au lieu d'être déclaré en tête du module, de sorte qu'il sera détruit à l'issue de son exécution, et que nul évènement des Label contenus dans les objets ClasseL ne pourra plus être pris en charge puisqu'il n'en existera plus rien.
 

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Vous avez pourtant bien déjà déclaré Public WithEvents Labelles As MSForms.Label en tête du module de classe ClasseL afin qu'il soit conserver durant toute l'existence de son exemplaire. Et bien il faut faire pareil pour LB: le déclarer en Tête de l'UserForm1 pour qu'il soit conservé durant tout le temps où celui ci restera chargé en mémoire, et pas seulement durant le temps d'exécution de UserForm_initialize
 

francoisC

XLDnaute Junior
Re : premier pas dans les modules de classe

Ouii Dranreb je vois et commencee à comprendre mais comment puis-je formuler ce que je voulais obtenir quand j'ai mis le code pour le label1 car normalement avec la classeL tous les labels devraient être "commandés" ? Puisqu'il me semble que c'est dans le module de classe qu'il faut insérer ce qu'on veut obtenir comme action ; Non ? Merci le Belfortain ; je suis Bisontin !
 

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Oh, vous savez, je plus simple serait sans doute de mettre tout le code dans le module de classe ClasseL. L'essentiel c'est de faire en sorte que les exemplaires créés de cet objet soient conservés dans le tableau LB, et pour cela il faudrait que ce dernier soit global. Private ça suffit. Si une ComboBox est impliquée, déclarez donc aussi une propriété pour elle dans ClasseL, ce sera plus simple.
(Notions: Une variable Public dans un module objet s'appelle une propriété, une procédure Public dans un module objet s'appelle une méthode)
 
Dernière édition:

francoisC

XLDnaute Junior
Re : premier pas dans les modules de classe

Super bien des choses se mettent place mais il y a encore un couic : Je reformule le projet :
Quand je clic sur un label (ex. le 5eme correspond au mois de mai) seul la combobox5 apparait. Comment le faire comprendre ?
 

Dranreb

XLDnaute Barbatruc
Re : premier pas dans les modules de classe

Faites apparaître la ComboBox que vous aurez communiqué par un Set à votre objet ClasseL en même temps que le Label, si vous avez bien choisi d'en faire comme lui une propriété dans le module de classe.
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 940
Membres
103 989
dernier inscrit
jralonso