Gestion evenements VBA pour controles dynamiques

Bonjour à tous,

Dans le cadre d'un portage d'appli de XL4 vers VBA, je rencontre un problème...

Je souhaite faire un catalogue dans une feuille excel: l'application est simple, je dispose d'un tableau avec différentes références.

J'ajoute les référence grace à un commandeButton "Ajouter" qui ouvre un formulaire dans lequel je rempli les caractéristique de la référence puis j'ajoute la ligne au catalogue.

Lorsque cette ligne est ajouté, j'ajoute également deux "commandButton" en fin de ligne.

L'un servant à supprimer la ligne, l'autre servant à modifier la ligne.

Easy one! 8)

pour l'ajout dynamique des "commandButton", j'ai suivi la méthode consistant à créer une classe par type de contrôle ainsi qu'une méthode d'initialisation par type de contrôle.

La méthode d'initialisation parcourant les OLEObject de la feuille et les insérant dans la classe adéquat.

Mon problème est le suivant, je perds régulièrement la gestion des évènement sur mes contrôles dynamiques.

Je dois donc avoir un bouton sur ma feuille pour lancer les procédures d'initialisation afin de récupérer la gestion des évènement.

La perte des évènements se produit lorsque j'ajoute une ligne ou lorsque j'en supprime une et par conséquent, lorsque j'ajoute ou je retire des contrôles.

Autre symptôme: les classes contenant les contrôles sont stockées dans des collections (variables globales). celle-ci est systématiquement supprimée (nothing) lors de l'ajout ou la suppression de contrôle

Y a t-il une méthode pour ajouter et supprimer des contrôle sans perdre la gestion des évènements?

J'imagine ne pas être le seul à avoir rencontré se genre de problème, aussi, je viens

solliciter votre aide.

Merci d'avance!

Bonsoir au forum,

Peux-tu envoyer un fichier raccourci sur lequel tu expliqueras ton problème,

tu auras certainement davantage de réponses.

Amicalement

Claude.

bonjour,

Les Exceliens qui jouent avec les classes de manière convainquante ne sont pas légion... (moi y compris )

ça serait bien si on pouvait avoir un bout de ton appli, mais j'imagine que ce n'est pas évident. Au moins le code ?

Pourquoi avoir choisi une collection et non un Array pour tes construction ? Comme je l'ai dit je suis loin d'être un expert es la chose, mais il faudrait peut-être revoir comment tu fais le lien CBtn/ référence ligne mais il me semble qu'avec un Array ce serait plus simple.

Tu devrais essayer de voir ce classeur du maître... Peut-être nous fera-t-il l'honneur d'une visite ?

Comme tu l'expliques, je ne vois pas l'utilité de ces Command Button ni de ta classe. A moins que ce ne soit pour roder ta curiosité.

Si ton catalogue est en forme de base de donnée un simple Userform suffit : Si tu pointes sur une ligne existante c'est à coup sur une modification ou une suppression.

Si tu pointes sur la ligne suivant la dernière c'est que tu es en mode ajout.

Un même USF est capable de gérer les 3 situations... plus besoin de Command Button, plus d'objet à gérer. YAKA gérer le Target.Row dans Worksheet_SelectionChange pour savoir quel bouton afficher dans ton USF...

Mais je n'ai peut-être pas tout saisi la subtilité de ton problème ?

EDIT : Autre suggestions toujours sur la base de Worksheet_SelectionChange : Pourquoi ne pas utiliser des boutons uniques et mobiles qui suivent ta sélection ? (Toujours avec l'idée que si on est sur une ligne vide on se met en mode ajout...

A+

Bonjour à tous et merci d'avoir répondu à mon appel.

Je joint mon catalogue afin que vous puissiez constater le problème (je l'espère...)

https://www.excel-pratique.com/~files/doc2/catalogue_Raid.rar

Je comprends la manière que tu me conseilles d'implémenter et je ne doute pas que ça marcherait (j'y viendrai peut-être), cependant je trouve dommage de ne pas maitriser l'ajout et la suppression dynamique de controles car tôt ou tard, je ne pourrai pas passer outre.

Je résume et généralise le problème.

Actuellement, je ne parviens pas à ajouter via une macro un controle sans perdre la gestion des évènements sur les controles précédemment ajoutés, ce dernier inclus.

Peut être est-il nécessaire que du code figure sur la feuille en question pour pérenniser la gestion des évènements?

merci pour vos lumières!

Par ailleurs,

c'est un problème que je rencontre à nouveau sur une autre classeur sur lequel l'utilisateur doit pouvoir ajouter une nouvelle zone de saisie à la suite des autres zone de saisie.

Chaque zone de saisie contient 3 combobox.

C'est juste pour appuyer l'importance de maitriser ces ajouts dynamiques de contrôles.

Rechercher des sujets similaires à "gestion evenements vba controles dynamiques"