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

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.

1

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, si vous avez un problème de compréhension ou un bug hésitez pas à intervenir.

Téléchargement de la démo :

Rechercher des sujets similaires à "vba ajouter controles dynamiquement userform"