Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Bonjour et merci pour votre attention
J'ai joint un classeur qui sera surement plus clair que ma demande; Laquelle est :
J'ai plusieurs dizaines de controls que j'ai créés et pour lesquels un ou des événement sont liés (exLBJ1_clic jusqu'à LBJ30_clic etc.) C'est beaucoup lourd (même si je l'ai fait).
La question est comment rendre le programme plus leger (on m'a parlé des modules de classe).
Merci encore pour votre aide.
Un exemple d'utilisation de classe pour la gestion d'évènement.
insérer un module de classe (destiné aux label LBCxx)
renommer ce module de classe (ici avec le nom Class_LBC)
dans le code de ce module de classe, insérer la ligne qui suit qui va permettre aux éléments qui sont du type ce module de classe de réagir aux évènements d'un label : Public WithEvents Label_LBC As MSForms.Label (label_LBC est un nom de votre choix)
Ensuite, il va falloir indiquer quels sont les contrôles du userform qui sont concernés par les évènements de cette classe.
Pour cela, on va remplir un tableau qui fera le "lien" entre les contrôles de type LBCxx et le module classe. Ce tableau est déclaré dans un module ordinaire qui est nommé mod_init_Class (nom à votre guise).
Dans le code de ce module, on déclare un tableau dynamique (à dimension variable). Ce tableau est nommé tClass_LBC() et il contiendra les contrôles de la classe Class_LBC. La déclaration du tableau se fait comme suit: Dim tClass_LBC() As New Class_LBC
Puis on implante la procédure Sub A_chaque_classe_son_tableau() qui va parcourir tous les contrôles du Userform EnregistrementHeures. Quand on rencontre un contrôle nommé LBCxx, on étend le tableau d'un élément puis on affecte ce contrôle à la propriété Label_LBC du dernier élément du tableau.
VB:
Sub A_chaque_classe_son_tableau()
Dim ctrl As Control, NBctrl As Integer
' dans le tableau tClass_LBC(), on affecte les contrôles
' LBC1, LBC2, ..., LBC30
NBctrl = -1
For Each ctrl In EnregistrementHeures.Controls
If ctrl.Name Like "LBC*" Then
NBctrl = NBctrl + 1
ReDim Preserve tClass_LBC(0 To NBctrl)
Set tClass_LBC(NBctrl).Label_LBC = ctrl
End If
Next ctrl
Nous avons jusqu'à maintenant:
créé un module de classe puis l'avons renommé.
inscrit une instruction dans ce module de classe permettant aux éléments de cette classe de réagir aux évènements de label.
créé un module d'initialisation permettant de définir quels labels doivent réagir aux évènement de type label.
dans ce module, créé un tableau dont les éléments sont de type le module de classe
puis dans ce module, rédiger un code qui pour chaque label concerné du userform le place dans le tableau.
Il reste maintenant, dans le code du module de classe, à rédiger le code de la procédure
évènementielle double-clique(). Dans l'exemple joint, si on double clique sur un label LBCxx, alors on affiche le nom du label cliqué ainsi que le texte de ce label.
le module d'initialisation sera lancé dans la procédure UserForm_Initialize()
Nous avons réalisé la même chose avec les contrôles Textbox nommés TBRxx.
Quand on double-clique sur un textbox TBRxx, on incrément sa valeur de 10.
On va donc trouver du code:
dans chaque module de classe
dans la procédure A_chaque_classe_son_tableau() dans le module mod_init_Class
Pour le test, afficher le userform puis double-cliquez sur un textbox de la colonne réalisé ou un label de la colonne chantier.
Sera as tu ici demaie car je tombe de sommeil et es pourtant le seul à avoir une réponse claire à ma demande je ne sais trop commnet te remercier
merci ma pomme merci
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.