FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les feuilles de calcul→Les contrôles de formulaire- 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 SubLa 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 SubSub 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 SubSub 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 SubCet 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 SubLa 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 SubEt si par la suite vous avez besoin de supprimer la forme, il suffit de l'appeler par son nom :
Feuil1.Shapes("Cible").DeleteCet 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 SubLien : 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


