Pourquoi y a-t-il 2 types de contrôles disponibles dans Excel? (2 boutons, 2 combos, 2 cases à cocher, etc ...)
Quelle est la différence entre Contrôles de formulaires et Contrôles ActiveX? Lequel devrais-je utiliser?
Certains exemples de code que je trouve fonctionnent en ligne avec mes commandes, mais d'autres non. Comment venir?
Comment puis-je travailler avec chaque type et comment puis-je faire la différence?
Il y a une confusion [éternelle] autour des deux types de contrôles disponibles pour Excel - exacerbés par le contraste - terminologie utilisé par différentes sources en ligne.
Ce n'est qu'un aperçu général des différences entre Contrôles de formulaire et Contrôles ActiveX (basé sur mes anciennes notes qui m'ont finalement aidé à comprendre les différences!) Visitez les liens inclus pour des informations plus détaillées sur chaque contrôle, y compris le code et les exemples de projets. ☺
(Adapté de mon message d'origine ici - maintenant fermé)
Il existe deux types de contrôles: Contrôles de formulaire et Contrôles ActiveX :
Les deux types de contrôles peuvent être utilisés sur des feuilles de calcul mais seuls les contrôles ActiveX peuvent être utilisé sur les formulaires utilisateur .
Les contrôles de formulaire font partie de la collection Formes (tout comme les objets de dessin), et sont donc appelés comme:
Les contrôles ActiveX font fondamentalement partie de la feuille de calcul et sont donc appelés comme:
Les deux types de contrôles peuvent être créés, modifiés et supprimés de la feuille de calcul ou par programme avec VBA, cependant, les 2 types de contrôles ont une syntaxe légèrement différente lorsque vous utilisez VBA pour vous y référer.
Certains sites discutent également d'une forme de données . Ce n'est rien de plus qu'un formulaire utilisateur spécialement conçu pour la saisie/manipulation de données, il aurait donc été plus logique de les appeler (le plus familier "Formulaire de saisie de données".
La documentation Office fait parfois référence à une feuille de calcul sous forme de formulaire. Bien que ce soit techniquement correct, ne laissez pas cela vous dérouter. Considérez le mot "forme" comme étant utilisé dans un sens général:
Contrôles de formulaire
Contrôles ActiveX
Les deux se regardent, se comportent et sont contrôlés de manière similaire, mais pas identique. (Liste ici .)
Par exemple, comparons les deux types de zones de liste déroulante . Dans certains langages de programmation, des contrôles comparables sont appelés "menu déroulant" ou "liste déroulante". Dans Excel, nous avons un " combo de contrôle de formulaire ", et un " Zone de liste déroulante de contrôle ActiveX ":
(Cliquez sur l'image pour agrandir.)
☆ "Nom par défaut" s'applique aux contrôles créés manuellement. Les contrôles créés par programmation n'ont pas (ou ne nécessitent pas) de nom par défaut et doivent donc en avoir un attribué immédiatement lors de la création.
(Source: ma réponse )
Cette image ci-dessous montre quels contrôles communs sont généralement disponibles pour une utilisation dans les feuilles de calcul et les formulaires utilisateur.
D'autres facteurs peuvent affecter la disponibilité du contrôle.
Office.com: Pourquoi les commandes ou contrôles liés au formulaire sur le ruban sont-ils désactivés?
Office.com: Présentation des formulaires, contrôles de formulaire et contrôles ActiveX sur une feuille de calcul
À propos des contrôles ActiveX et des problèmes de sécurité associés
Un contrôle ActiveX est un extension à la boîte à outils VBA. Vous utilisez les contrôles ActiveX comme vous le feriez avec n'importe quel contrôle intégré standard, tel que le contrôle CheckBox. Lorsque vous ajoutez un contrôle ActiveX à une application, il devient partie intégrante de l'environnement de développement et d'exécution et fournit de nouvelles fonctionnalités pour votre application.
Un contrôle ActiveX est implémenté en tant que serveur en cours de traitement (généralement un petit objet) qui peut être utilisé dans n'importe quel conteneur OLE. Notez que la fonctionnalité complète d'un contrôle ActiveX n'est disponible que lorsqu'il est utilisé dans un conteneur OLE conçu pour être au courant des contrôles ActiveX.
Ce type de conteneur, appelé conteneur de contrôle ou objet de contrôle, peut fonctionner un contrôle ActiveX en utilisant les propriétés et méthodes du contrôle, et reçoit des notifications du contrôle ActiveX sous forme d'événements. La figure suivante illustre cette interaction:
Voir aussi:
Wikipédia: ActiveX
Symantec.com: Discussion des vulnérabilités ActiveX
How-To Geek: Quels sont les contrôles ActiveX et pourquoi ils sont dangereux
Dans Excel, les deux types de boutons radio sont en fait appelés Boutons d'options . Pour confondre davantage les choses:
le nom par défaut du contrôle de formulaire est OptionButton1
.
le nom par défaut du contrôle ActiveX est Option Button 1
.
Une bonne façon de les distinguer est d'ouvrir la liste des propriétés du contrôle (sur le ruban sous l'onglet Développement, ou en cliquant avec le bouton droit sur le contrôle et en choisissant Properties
, ou en appuyant sur F4), car le contrôle ActiveX a beaucoup plus d'options que le contrôle de formulaire plus simple.
Les boutons d'option et les cases à cocher peuvent être liés ensemble (donc une seule option à la fois peut être sélectionnée dans le groupe) en les plaçant dans un partage Zone de groupe .
Sélectionnez le contrôle de zone de groupe, puis maintenez Ctrl tout en sélectionnant chacun des autres contrôles que vous souhaitez regrouper. Cliquez avec le bouton droit sur le contrôle de zone de groupe et choisissez
Grouping
→Group
.
Les deux premiers liens ci-dessous sont des ensembles d'instructions distincts pour gérer chaque type de bouton d'option.
Click
uniquement)Les événements de contrôle de formulaire ne peuvent répondre qu'à un seul événement: l'événement Click
. (Plus d'informations ici .) Notez que cette section ne s'applique pas aux formulaires utilisateur car ils utilisent uniquement des contrôles ActiveX.
Pour ajouter une procédure pour l'événement Click
:
Cliquez avec le bouton droit sur le contrôle et choisissez Assign Macro...
Dans la boîte de dialogue "Attribuer une macro":
Sélectionnez une procédure existante et cliquez sur OK, ou,
Créez une nouvelle procédure dans le VBE en cliquant sur New..., ou,
Enregistrez une nouvelle macro en cliquant sur Record..., ou,
pour supprimer l'événement attribué, supprimez son nom de Macro Name
champ et cliquez OK.
Pour renommer, modifier ou supprimer des macros existantes, appuyez sur Alt+F8 pour ouvrir l'interface Macro
:
Les contrôles ActiveX ont une liste plus complète des événements auxquels ils peuvent être configurés pour répondre.
Pour affecter des événements aux contrôles ActiveX, cliquez avec le bouton droit sur le contrôle et choisissez View Code
. Dans le VBE, vous pouvez coller du code ou choisir des événements spécifiques dans la liste déroulante en haut à droite de la fenêtre VBE.
(Cliquez sur l'image pour agrandir.)
Les événements peuvent également être utilisés dans les contrôles des formulaires utilisateur. Étant donné que seuls les contrôles ActiveX peuvent être placés dans un formulaire utilisateur, vous aurez le compromis "plus de codage + plus de fonctionnalités".
Les contrôles ActiveX sont ajoutés aux formulaires utilisateur de la même manière qu'ils sont ajoutés à une feuille de calcul. Gardez à l'esprit que tous les événements affectés à la forme utilisateur lui-même (c'est-à-dire, en arrière-plan) seront "bloqués" dans toutes les zones couvertes par un contrôle, vous devrez donc peut-être affecter les mêmes événements à les contrôles ainsi que le formulaire utilisateur.
Par exemple , afin que cette forme d'utilisateur réponde à MouseMove
n'importe où sur le formulaire, le même code d'événement a été appliqué à le formulaire utilisateur, les zones de texte, les boutons d'option et le cadre:
Sub formControl_add()
'create form control
Dim ws As Worksheet: Set ws = ActiveSheet
With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100)
.Name = "cOptionButton1" 'name control immediately (so we can find it later)
End With
End Sub
Sub formControl_modify()
'modify form control's properties
Dim ws As Worksheet: Set ws = ActiveSheet
ws.Shapes("cOptionButton1").Select
With Selection 'shapes must be Selected before changing
.Characters.Text = "wxyzabcd"
End With
End Sub
Sub formControl_delete()
'delete form control
Dim ws As Worksheet: Set ws = ActiveSheet
ws.Shapes("cOptionButton1").Delete
End Sub
Sub activexControl_add()
'create ActiveX control
Dim ws As Worksheet: Set ws = ActiveSheet
With ws.OLEObjects.Add("Forms.CommandButton.1")
.Left = 25
.Top = 25
.Width = 75
.Height = 75
.Name = "xCommandButton1" 'name control immediately (so we can find it later)
End With
End Sub
Sub activexControl_modify()
' modify activeX control's properties
Dim ws As Worksheet: Set ws = ActiveSheet
With ws.OLEObjects("xCommandButton1").Object
.Caption = "abcxyz"
.BackColor = vbGreen
End With
End Sub
Sub activexControl_delete()
' delete activeX control
Dim ws As Worksheet: Set ws = ActiveSheet
ws.OLEObjects("xCommandButton1").Delete
End Sub
Sub ComboBox_addRemoveItems_FormControl()
Dim ws As Worksheet: Set ws = ActiveSheet
'add item to form control combo box
ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd"
'remove all items from from form control combo bo
ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems
End Sub
Sub ComboBox_addRemoveItems_ActiveXControl()
Dim ws As Worksheet: Set ws = ActiveSheet
'add items to ActiveX combo box
ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd"
'remove all items from ActiveX combo box
ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear
End Sub
Office.com: Ajouter une case à cocher ou un bouton d'option ( Contrôles de formulaire )
Office.com: Ajouter une case à cocher, un bouton d'option ou un bouton bascule ( Contrôles ActiveX )
Office.com: Présentation des formulaires, contrôles de formulaire et contrôles ActiveX sur une feuille de calcul
Office.com: Activer la sélection via les commandes de choix (cases à cocher et liste)
Office.com: Ajoutez, modifiez, recherchez et supprimez des lignes à l'aide d'un formulaire de données
MSDN: Membres de forme VBA
MSDN: Utilisation de contrôles ActiveX sur des feuilles (Office)
Exceldemy: Comment utiliser les contrôles de formulaire dans Excel
MSDN: Utilisation des contrôles Windows Forms sur les feuilles de calcul Excel (Visual Studio)
Microsoft TechNet: Comportement des contrôles ActiveX incorporés dans les documents Office
Débordement de pile: Quelle est la différence entre "Contrôles de formulaire" et "Contrôle ActiveX" dans Excel 2010?