Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TABLEAU DE CONTRÔLES DYNAMIQUES (AVEC ÉVÈNEMENTS)


Information sur la source

Catégorie :VBA Classé sous : controls, tableau, excel, withevents, vba Niveau : Initié Date de création : 24/04/2006 Date de mise à jour : 29/09/2006 15:59:13 Vu / téléchargé: 10 082 / 1 384

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
*Undocumented VBA feature*

Cette source VBA s'appuie sur l'objet Collection de VB pour créer des collections de contrôles.

Comme il n'est pas possible, en VB sous VBA, de modifier le designer (quoiqu'un bon complément…), cette source va créer dynamiquement (mais en liaison précoce) des collections de contrôles !

Le cadeau est la gestion des évènements déclenchés par des contrôles collectionnés (comme dans VB !), grâce à la classe d'emballage (wrapping).

Et pour ceux d'entre vous qui connaissent le wrapping, posez-vous la question suivante : comment obtenir un IEnumerator si VBA ne vous propose pas le menu Attributs de Procédures?



 

Conclusion

Testez la démo, et ensuite, appropriez-vous le code!
L'essentiel réside dans les 2 classes (ExtendedControls et ExtendedControl).

Pour les réutiliser, n'utilisez pas le copier/coller, cela ne suffit pas. Exportez les modules de classes (*.cls) et le module standard (*.bas), et ré-importez-les dans votre projet.

N'hésitez pas à les faire évoluer ! Par fainéantise, je n'ai traité que 2 types (TextBox et Label), mais on peut en ajouter de nombreux autres assez facilement. De plus, je n'ai implémenté que quelques évènements (2 pour être honnête), mais ce qui marche pour 2, marche pour tous les autres (sauf les évènements de l'objet générique de type Control).
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

24 avril 2006 21:58:28 :
ré-ajustement de niveau (de expert à initié), et changement de mot-clés et commentaires.
28 avril 2006 00:02:53 :
Modification d'un mot-clé en rapport avec cette source (pour le moteur de recherche)
29 septembre 2006 15:56:40 :
Pas assez d'accroche! Peut-être le fait que ce soit un fichier Excel, avec des macros, on a peur de l'infection. J'ai mis dans le zip tout ce qu'il y a dans le classeur, j'espère avoir plus de succès. Notes: il n'y a pas de macros à démarrage automatique, une fois le classeur ouvert, vous pouvez d'abord lire le code, et l'exécuter ensuite (si vous le voulez).
29 septembre 2006 15:59:13 :
je n'avais pas pensé que le fichier xls disparaîtrait, j'aurais dû.

Commentaires et avis

signaler à un administrateur
Commentaire de titounet65 le 07/08/2006 17:51:33

Bravo,

J'avais déja traité ce problème mais pas aussi élégamment.
Merci à vous et bonne continuation

Au revoir

signaler à un administrateur
Commentaire de rvblog le 07/08/2006 22:40:55

Salut titounet65,
eh bien, je ne sais pas quoi dire, sinon merci.
un commentaire si précis, si bref, si succint...
tellement d'espoir porté en 2 phrases...
après 4 mois d'attente...

si ça, ça n'est pas quelqu'un de mon entourage...
alors je suis mal entouré :)

signaler à un administrateur
Commentaire de eriiic le 06/02/2007 22:30:40

Bonjour rvblog,
Ton code a l'air formidable. Je dis "a l'air" car je découvre les modules de classes et si j'en vois l'interet j'avoue avoir du mal à les lire et les comprendre. En tout cas il est très adapté à un projet que j'ai en tête et ça me permettra d'en apprendre plus.
Ce qui serait bien, pour des néophytes comme moi, c'est que tu l'enrichisses en complétant avec des commentaires (déjà très nombreux, félicitation ;-) ) plus explicatifs sur le rôle des différentes sections, sur les bases des modules de classe.
Et puis sur la description donne un exemple simple d'utilisation qui encouragera la curiosité.
Je te souhaite beaucoup de téléchargements... :-)
PS : je ne suis pas de ton entourage mais un sincère merci pour ce travail et ce partage :-)

signaler à un administrateur
Commentaire de rvblog le 07/02/2007 11:54:57

Salut ERIIIC,

d'abord, je te remercie pour ton commentaire. Ensuite, je te remercie pour son contenu :)

Il est vrai, que quand on utilise souvent la POO en VB, et les classes d'emballage, on finit par oublier que tout le monde ne les connait pas!

Néanmoins, le but de cette source n'était pas de les présenter, mais de solutionner un problème lié au classes d'emballage :

Comment faire remonter le flux d'évènements des classes emballées, à la classe d'emballage (on ne peux pas déclarer un tableau de contrôles avec le prédicat WithEvents, ni une collection [dans ce cas, ce serait inutile, on n'obtiendrait que les évènements de la collection et pas ceux des "collectionnés"])?

Pour ce faire, je le mets en évidence (et en pratique) en tentant de "solutionner" un autre problème récurrent (mais en VBA seulement) : l'ajout dynamique de contrôles (pendant l'exécution) et la récupération des évènements de ceux-ci.

Je viens de jeter un oeil sur le site... pour constater qu'il n'existe pas de tutoriel sur les classes d'emballage! Voici donc un travail potentiel d'avenir (il faudrait juste que je trouve du temps).

Pour résumer la technique de la classe d'emballage (et des classes emballées [plus connues sous le nom de "classe à s'emballe :)]) :
- vu de l'utilisateur (mais développeur), on veux une collection d'objets de même type (MesObjets contenant du type MonObjet), et on veux manipuler cette collection comme n'importe quelle collection VB (For each In... Next, Item, Add, Remove...).
- vu du concepteur (ça peut être le même développeur), il faut une classe qui sera vue de l'utilisateur comme une collection (MesObjets, classe d'emballage, toujours au pluriel), et une classe qui sera vue de l'utilisateur comme un élément de la collection (MonObjet, classe emballée, toujours au singulier).

Donc, MesObjets implémentera, au minimum, les méthodes Add et Remove, et les propriétés Item et NewEnum (Item est la propriété par défaut, qui permet à l'utilisateur d'écrire MesObjets("Clé") pour obtenir une référence à un objet de type MonObjet, et NewEnum est la propriété qui lui permet d'écrire un bloc d'énumération For each moTemp in Mesobjets blabla Next moTemp). Pour que ceci fonctionne, MesObjets déclare un membre privé de type Collection (la vraie, mais invisible pour l'utilisateur), et s'appuie dessus pour fournir les services précités.
On peut ensuite ajouter un tas d'autres services observateurs (genre Count, ItemByValue, ...).
La classe MonObjet se contente d'implémenter une propriété ParentCollection, qui lui permet d'accéder à sa collection pour solliciter des services de sa part (c'est une référence circulaire, qu'il faut apprendre à libérer à la destruction, ce qui n'est pas le cas dans l'exemple que je fourni (oups)), et les propriétés qui sont propres à son aspect fonctionnel (par exemple Value).

Pour conclure (je n'aurais pas dû développer ici), on peut maintenant écrire :

set moTemp = MesObjets.Add("clé")
msgbox MesObjets("clé").Value
ou (parfaitement inutile, donc totalement indispensable)
msgbox MesObjets("clé").ParentCollection.Add("clé2").Value

voilà ce que cela donne quand je fais court (j'essaierais de faire un tuto, promis, à moins que quelqu'un le fasse avant).

à+, et merci encore pour ton commentaire.
PS : tu es de mon entourage, tu es sur VB France :)

signaler à un administrateur
Commentaire de eriiic le 12/02/2007 22:43:11

Bonsoir rvblog,

Merci pour tes explications. Encore un peu ténébreux pour moi tout ça, reste à l'éclaircir en mettant en application... :-)
Si jamais tu as le courage (et le temps) de faire un tutorial ça serait sympa que tu l'annonces ici, j'ai mis une alerte sur ce fil.
Bonne soirée à toi :-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Aide pour code VBA [ par bigbiboun ] Bonjour, Je suis en deuxième année d'IUT et nous devons réaliser un logiciel. Il s'agit en effet de créer une interface permettant à l'utilisateur de importer un tableau excel dans un même fichier vba [ par gabao ] bonjour à tous!!alors je vous explique mon problème: j'ai créé un tableau sous excel que j'aimerais recuperer sous excel vba...le problème est que je Vba sous excel: recherche de date pour remplacer une valeur [ par mike1788 ] Bonjour <p class="MsoNorma Insertion d'image en VBA Excel 2007 à partir d'un tableau de données [ par Theodavid ] Bonjour,voilà mon problème :j'ai une liste de 700 produits avec leurs références dans un tableau excel et j'ai un dossier avec les 700 images nomées p Extraction de donnees .csv vers tableau excel en vba [ par macox74 ] Bonjour, J'ai plusieurs fichiers csv sur lesquels je doit recuperer certains champs. Et puis une fois les champs recuperer, les envoyé dans un tab VBA Excel 2007 [ par LR64 ] Bonjour, Dans une feuille excel contenant un tableau, j'ai mis en place un userform qui s'ouvre en cliquant sur une case. ce que je n'arrive pas a fai VBA création d'alarme [ par LR64 ] Très très urgent!! problème de dernière minute.Bonsoir, j'ai créée un programme de gestion des stocks. j'ai mis en place une mise en forme conditionne VBA EXCEL TABLEAU CROISEE DYNAMIQUES [ par vince ] QLQn saurait il comment inserer des formules, soit manuellement soit en programmant, sur un tableau croise dynamique qdont les calculs font references Affichage d'un tableau dans un formulaire VBA Excel [ par pimouss ] Je voudrais afficher un tableau dans un formulaire VBA pour y récapituler les données saisies par l'utilisateur.Existe-t-il un contrôle pour cela ?Mer URGENT! VBA et EXCEL [ par djdiabolik ] je cherche a faire un tableau excel sous vb et je voudrais connaitre les parametres pour faire l'ossature du tableau, a savoir les lignes doubles, sim


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,874 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.