[VBA] Ajouter des contrôles dynamiquement dans un Userform

Septembre 2016

Pour créer le support de cette démo j'ai employé mon exemple de la calculatrice mais en créant tous les contrôles de façon dynamique.

Lorsque vous créez des contrôles de façon dynamique sur un UF, Excel ne reconnaît pas les noms des contrôles. Ce qui revient à dire que les événements générés par vos contrôles ainsi que leurs propriétés
ne seront pas accessibles avec les noms que vous leur attribuez. Par exemple, vous créez un bouton avec le code suivant :
Set Bouton = Me.Controls.Add("Forms.CommandButton.1", "Bt" & i, True)
Le nom du bouton sera (en supposant que i = 1 ) BT1
Mais l'événement Private Sub BT1_Click() ne sera jamais généré. Excel ne connaîtra que Bouton. Pour y remédier il faut employer des collections d'objets pour les propriétés et des collections de classe pour les événements. Les collections d'objets contiennent non seulement le contrôle mais également une clé qui permet de le référencer. En initialisant la propriété Tag des contrôles avec l'index souhaiter la collection de classe pourra renvoyer un index ce qui permet aussi de savoir quel contrôle à été le sujet de cet événement.

Il n'existe aucun contrôle dans le design de l'UserForm. Tous les contrôles de la calculatrice sont créés dynamiquement, y compris les Frames Container. La démo donne aussi le moyen d' incorporer les boutons dans les frames


Il faut déjà avoir une certaine maîtrise du VBA pour comprendre le mécanisme de ces collections,
mais si vous avez un problème de compréhension ou un bug à signaler vous pouvez me joindre par MP.

Téléchargement :
Serveur 1 : Ajouter Control UserForm.xls

A voir également :

Ce document intitulé «  [VBA] Ajouter des contrôles dynamiquement dans un Userform  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.