IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ Excel

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022 

 
OuvrirSommaireLes feuilles de calculLes contrôles de formulaire

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.

Créé le 19 février 2008  par SilkyRoad
Vba
Sélectionnez
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.

Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad
Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad
Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad

Cet exemple suppose que la ListBox est paramétrée pour autoriser la mulisélection d'éléments (Type de sélection étendue).

Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad

La procédure ajoute un objet combobox (DropDown) dans la feuille de calcul.

Vba
Sélectionnez
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 :

Vba
Sélectionnez
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.

Vba
Sélectionnez
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
Créé le 19 février 2008  par SilkyRoad

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 :

Vba
Sélectionnez
 euil1.Shapes("Zone combinée 1").ControlFormat.LinkedCell = "$H$10"

Pour ne plus avoir de cellule liée :

Vba
Sélectionnez
Feuil1.Shapes("Zone combinée 1").ControlFormat.LinkedCell = ""
Créé le 26 mai 2008  par SilkyRoad

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.

Créé le 18 novembre 2008  par Microsoft

La méthode RemoveAllItems supprime toutes les éléments des zones de liste.

Vba
Sélectionnez
Dim Ws As Worksheet
 
Set Ws = ThisWorkbook.Worksheets("Feuil1")
Ws.Shapes("Zone de liste 1").ControlFormat.RemoveAllItems
Créé le 19 février 2009  par SilkyRoad

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.