FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Quelle est la différence entre les contrôles de formulaire et les contrôles OleObject ?
- Comment vérifier le statut d'une case à cochée ?
- Comment boucler sur les cases à cocher formulaires d'une feuille de calcul ?
- Comment supprimer tous les contrôles de formulaire contenus dans une feuille ?
- Comment identifier les lignes sélectionnées dans une Listbox formulaire ?
- Comment créer des contrôles de formulaire dynamiquement par macro ?
- Comment lier une cellule à un ComboBox (dropdown) ?
- Pourquoi je ne peux plus insérer de graphique dans une Boîte de dialogue Microsoft Excel 5.0, sous Excel 2007 ?
- Comment supprimer le contenu d'une zone de liste ?
Les objets formulaires sont disponibles depuis la barre d'outils du même nom.
Les contrôles ActiveX (OleObject) sont disponibles depuis la barre d'outils "Boîte à outils contrôles".
Dans Excel 2007, les deux types de contrôles sont dans l'onglet "Développeur", groupe "Contrôles", bouton "Insérer".
Bien que leurs formes soit ressemblantes, ces deux types d'objets ne possèdent pas les mêmes caractéristiques. Les contrôles de formulaire sont issus des versions anciennes d'Excel et sont conservées pour assurer une compatibilité ascendante des classeurs. Les contrôles formulaires sont toujours utilisables dans Excel 2007. Toute fois, privilégiez les contrôles ActiveX qui contiennent plus de propriétés, de nombreux évènements et permettent plus de souplesse dans vos projets.
Sub
StatutCheckbox_Formulaire
(
)
If
Feuil1.Shapes
(
"Check Box 1"
).ControlFormat.Value
=
xlOn Then
MsgBox
"Coché."
Else
MsgBox
"Décoché."
'xlOff
End
If
End
Sub
La procédure suivante coche ou décoche la checkbox.
Sub
CocherDecocher_Checkbox_Formulaire
(
)
Dim
Obj As
Object
Set
Obj =
Feuil1.Shapes
(
"Check Box 1"
).OLEFormat.Object
If
Obj.Value
=
xlOff Then
Obj.Value
=
xlOn
Else
Obj.Value
=
xlOff
End
If
End
Sub
Sub
BoucleCheckBoxes_Formulaire
(
)
Dim
Cb As
CheckBox
'Boucle sur les checkboxes formulaires de la Feuil1
For
Each
Cb In
Feuil1.CheckBoxes
'si la case est cochée
'(utilisez xlOff pour vérifier le statut "décoché")
If
Cb.Value
=
xlOn Then
Debug.Print
Cb.Name
End
If
Next
Cb
End
Sub
Sub
Supprime_ObjetsFormulaires
(
)
Dim
Obj As
Shape
'Boucle sur les formes de la feuille active
For
Each
Obj In
ActiveSheet.Shapes
'Identifie les objets formuaires et les supprime
If
Obj.Type
=
msoFormControl Then
Obj.Delete
Next
Obj
End
Sub
Cet exemple suppose que la ListBox est paramétrée pour autoriser la mulisélection d'éléments (Type de sélection étendue).
Sub
IdentifieMultiselection_ListBoxFormulaire
(
)
Dim
i As
Integer
With
Worksheets
(
"Feuil1"
)
For
i =
1
To
.ListBoxes
(
"List Box 1"
).ListCount
If
.ListBoxes
(
"List Box 1"
).Selected
(
i) Then
MsgBox
.ListBoxes
(
"List Box 1"
).List
(
i)
End
If
Next
i
End
With
End
Sub
La procédure ajoute un objet combobox (DropDown) dans la feuille de calcul.
Sub
AjouteComboBox_Formulaire
(
)
Dim
Obj As
Object
'Ajoute le ComboBox dans la feuille
'...DropDowns.Add(PositionHorizontale, PositionVerticale, Largeur, Hauteur)
Set
Obj =
Feuil1.DropDowns.Add
(
295
, 150
, 170
, 15
)
With
Obj
'Renomme la forme.
.Name
=
"Cible"
'Définit la plage de données qui va s'afficher dans le ComboBox
.ListFillRange
=
"Feuil2!A1:A10"
'Définit la cellule liée (La cellule affichera l'index de l'élément
'sélectionné dans la ComboBox).
.LinkedCell
=
"Feuil1!$H$10"
'Nombre d'éléments visibles sans vavoir besoin
'd'utilisation la barre de défilement verticale.
.DropDownLines
=
8
.Display3DShading
=
False
End
With
End
Sub
Et si par la suite vous avez besoin de supprimer la forme, il suffit de l'appeler par son nom :
Feuil1.Shapes
(
"Cible"
).Delete
Cet autre exemple insère une série de boutons formulaires dans la plage de cellules B2:B11, et leur associe une macro créée dynamiquement aussi.
Sub
AjouteSerieBoutonsFormulaires
(
)
Dim
i As
Byte
Dim
x As
Integer
Dim
Code As
String
Dim
S As
Shape
For
i =
2
To
11
'création des boutons dans la Feuil1
With
Feuil1
Set
S =
.Shapes.AddFormControl
(
xlButtonControl, .Cells
(
i, 2
).Left
, .Cells
(
i, 2
).Top
, _
.Cells
(
i, 2
).Width
, .Cells
(
i, 2
).Height
)
End
With
'Définit le texte qui va s'afficher dans le bouton.
S.TextFrame.Characters.Caption
=
"bouton "
&
i
'Attache une macro au bouton
S.OnAction
=
"MacroBouton"
Next
i
'Crée dynamiquement la macro attachée aux boutons.
Code =
"Sub MacroBouton"
&
vbCrLf
Code =
Code &
"MsgBox Application.Caller"
&
vbCrLf
Code =
Code &
"End Sub"
'Insertion de la macro dans le **Module1**.
'(adaptez le nom du module si nécessaire)
With
ThisWorkbook.VBProject.VBComponents
(
"Module1"
).CodeModule
x =
.CountOfLines
+
1
.InsertLines
x, Code
End
With
End
Sub
Lien : Visual Basic Editor
Effectuez un clic droit sur l'objet.
Sélectionnez l'option "Format de contrôle".
Cliquez sur l'onglet "Contrôle".
Saisissez la référence dans le champ "Cellule liée", par exemple: $H$10
Désormais, la cellule $H$10 affiche l'index de l'élément sélectionné dans la ComboBox.
Pour attribuer une cellule liée par macro :
euil1.Shapes
(
"Zone combinée 1"
).ControlFormat.LinkedCell
=
"$H$10"
Pour ne plus avoir de cellule liée :
Feuil1.Shapes
(
"Zone combinée 1"
).ControlFormat.LinkedCell
=
""
Cette fonctionnalité n'a pas pu être implémentée dans la version Excel 2007.
Il n'est donc plus possible de coller un graphique et de l'afficher dans une boîte de dialogue formulaire.
La méthode RemoveAllItems supprime toutes les éléments des zones de liste.
Dim
Ws As
Worksheet
Set
Ws =
ThisWorkbook.Worksheets
(
"Feuil1"
)
Ws.Shapes
(
"Zone de liste 1"
).ControlFormat.RemoveAllItems