Re : VBA Module de classe
Bonjour.
Un module de classe est à la fois un modèle d'objet, son plan de construction et la programmation destinée à fonctionner sur les exemplaires qui en seront créés. Dans le jargon on appelle ces exemplaires des "instances" pour bien les distinguer de leur type, qui n'est autre que le nom du module de classe. Celui ci devient en effet d'office un type de donnée, de sorte qu'on peut le préciser derrière As dans une déclaration Dim ou Private.
Dans la programmation extérieure au module de classe on ne voit de celui ci que les élément précisés avec le mot clé Public, mais, à la différence d'un module ordinaire, on ne peut y accéder qu'à condition de le faire précéder d'un point, puis encore devant, à moins d'une instruction With préalable le disant déjà, d'une expression représentant une instance de cet objet (sinon: erreur de compilation). S'il s'agit d'une variable de votre crû, il faut en outre qu'une expression de ce type ait été affectée par un Set à cette variable d'instance (sinon: erreur d'exécution, cette fois). Fort heureusement, l'expression formée du mot clé New suivi du type d'objet (qui est en même temps le nom de son module de classe) représente une instance tout juste créée de ce type d'objet.
Propriétés et méthodes sont les appellations conventionnelles de ces élements visibles de l'extérieur du module de classe, déjà vues dans l'aide de VBA à propos des objets de bibliothèques fournies. Une chose déclarée Public dans un module de classe a un statut de propriété quand il s'agit d'une simple variable, d'une Function ou d'une Property Get dépourvues de paramètre, ou d'une Property Let ou Set munie d'un seul paramètre. Dans tous les autre cas il s'agit d'une méthode, en particulier quand c'est une Sub avec ou sans paramètre.
Enfin, un objet peut aussi décréter des évènements dans un autre module objet. Pour cela, il doit y être déclaré en tête avec le mot clé WithEvents. Cela a pour conséquence d'installer son nom dans la liste de gauche (Objet) qui surmonte la fenêtre de code. S'il y est sélectionné, celle de droite (Procédure) propose les différents modèles de procédures pouvant être installés automatiquement pour gérer ces évènements. Dans le module de classe, ces évènements sont déclarés au moyen d'instructions Event, et, dans les exécutions, décrétés par des RaiseEvent.
C'est en considérant cela que vous pouvez décider si un module de classe pourrait simplifier l'écriture des fonctionnalités dont vous aurez besoin. À première vue il ne me semble pas. En revanche des Dictionary pourraient être fort utiles à la place de tableaux, et en particulier des dictionnaires arborescents, c'est à dire dont les items sont soit des listes de numéros de lignes dans la plage source qui a servi à le constituer, soit eux mêmes des dictionnaires arborescents pour les colonnes restantes, ce qui permet de retrouver instantanément une information à partir de plusieurs clés hiérarchiques.
Si le choix du légume et d'une couleur ou d'une saison est effectué dans des ComboBox d'un Userform, là oui, j'ai défini, si ça vous intéresse un objet de type ComboBoxLiés qui se comporte un peut comme un super-ComboBox. Il suffit pratiquement de lui annoncer au début chacun des ComboBox à gérer accompagné de la colonne d’où tirer sa List et ensuite il décrète des évènements pour récupérer les choix effectués.