Utilisation de contrôles ActiveX dans une feuille

Cette rubrique contient des informations relatives à l'utilisation de contrôles ActiveX dans une feuille de calcul ou de graphique. Pour obtenir des informations générales sur l’ajout et l’utilisation de contrôles, consultez Utilisation de contrôles ActiveX sur un document et Création d’une boîte de dialogue personnalisée.

Vous devez prendre en compte les éléments suivants lorsque vous utilisez des contrôles dans une feuille :

  • En plus des propriétés standard disponibles pour les contrôles ActiveX, les propriétés suivantes peuvent être utilisées avec les contrôles ActiveX dans Microsoft Excel : BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell et ZOrder.

    Ces propriétés peuvent être définies et renvoyées à l'aide du nom du contrôle ActiveX. L'exemple suivant montre comment faire défiler le classeur pour que le contrôle CommandButton1 se trouve dans le coin supérieur gauche.

      Set t = Sheet1.CommandButton1.TopLeftCell
      With ActiveWindow
          .ScrollRow = t.Row
          .ScrollColumn = t.Column
      End With
    
    
  • Certaines méthodes et propriétés Microsoft Excel Visual Basic sont désactivées lorsqu'un contrôle ActiveX est activé. Par exemple, la méthode Sort ne peut pas être utilisée lorsqu’un contrôle est actif : le code suivant échoue lors d’une procédure événementielle correspondant à un clic de bouton (parce que le contrôle est encore actif après que l’utilisateur a cliqué dessus).

      Private Sub CommandButton1.Click 
          Range("a1:a10").Sort Key1:=Range("a1") 
      End Sub 
    

    Vous pouvez contourner ce problème en activant un autre élément sur la feuille avant d'utiliser la propriété ou la méthode qui a échoué. Par exemple, le code suivant trie la plage :

      Private Sub CommandButton1.Click 
          Range("a1").Activate 
          Range("a1:a10").Sort Key1:=Range("a1") 
          CommandButton1.Activate 
      End Sub
    
  • Les contrôles d'un classeur Microsoft Excel incorporé dans un document d'une autre application ne fonctionneront pas si l'utilisateur double-clique sur le classeur pour le modifier. En revanche, ces contrôles fonctionneront si l'utilisateur clique avec le bouton droit sur le classeur et sélectionne la commande Open dans le menu contextuel.

  • Si un classeur Microsoft Excel est enregistré au format Classeur Microsoft Excel 5.0/95, les informations relatives aux contrôles ActiveX sont perdues.

  • Le mot clé Me dans une procédure événement pour un contrôle ActiveX d'une feuille fait référence à la feuille, non au contrôle.

Ajout de contrôles avec Visual Basic

Dans Microsoft Excel, les contrôles ActiveX sont représentés par des objets OLEObject de la collection OLEObjects (tous les objets OLEObject se trouvent aussi dans la collection Shapes). Pour ajouter un contrôle ActiveX dans une feuille au niveau du programme, utilisez la méthode Add de la collection OLEObjects. L'exemple suivant montre comment ajouter un bouton de commande dans la feuille de calcul 1.

Worksheets(1).OLEObjects.Add "Forms.CommandButton.1", _ 
    Left:=10, Top:=10, Height:=20, Width:=100

Utilisation de propriétés de contrôle avec Visual Basic

Dans la plupart des cas, votre code Visual Basic fait référence aux contrôles ActiveX par leur nom. L'exemple suivant montre comment changer la légende du contrôle CommandButton1.

Sheet1.CommandButton1.Caption = "Run"

Lorsque vous utilisez un nom de contrôle en dehors du module de classe pour la feuille contenant ce contrôle, vous devez indiquer le nom du contrôle avec le nom de la feuille.

Pour modifier le nom du contrôle utilisé dans le code Visual Basic, sélectionnez le contrôle et définissez la propriété (Name) dans la fenêtre Propriétés.

Étant donné que les contrôles ActiveX sont également représentés par les objets OLEObject de la collection OLEObjects, vous pouvez définir les propriétés des contrôles à l'aide de ces objets. L'exemple suivant montre comment définir la position à gauche du contrôle CommandButton1.

Worksheets(1).OLEObjects("CommandButton1").Left = 10

Les propriétés de contrôle qui ne sont pas des propriétés de l'objet OLEObject peuvent être définies en renvoyant l'objet de contrôle à l'aide de la propriété Object. L'exemple suivant montre comment définir la légende du contrôle CommandButton1.

Worksheets(1).OLEObjects("CommandButton1"). _ 
    Object.Caption = "run me"

Étant donné que tous les objets OLE appartiennent également à la collection Shapes, vous pouvez utiliser cette collection pour définir les propriétés de plusieurs contrôles. L'exemple suivant montre comment aligner le bord gauche de l'ensemble des contrôles de la feuille de calcul 1.

For Each s In Worksheets(1).Shapes 
    If s.Type = msoOLEControlObject Then s.Left = 10 
Next

Utilisation des noms de contrôle avec les collections Shapes et OLEObjects

Un contrôle ActiveX dans une feuille a deux noms : le nom de la forme qui le contient (que vous pouvez voir dans la zone Nom lorsque vous affichez la feuille) et le nom de code de ce contrôle (que vous pouvez voir dans la cellule à droite de (Nom) dans la fenêtre Propriétés). Lorsque vous ajoutez un contrôle dans une feuille, le nom de la forme et le nom de code correspondent. Cependant, si vous modifiez le nom de la forme, le nom de code n'est pas automatiquement modifié en conséquence et inversement.

Vous pouvez utiliser le nom de code d'un contrôle dans le nom de ses procédures événement. Cependant, lorsque vous renvoyez un contrôle de la collection Shapes ou OLEObjects pour une feuille, vous devez utiliser le nom de la forme, non le nom de code, pour faire référence au contrôle par son nom. Par exemple, supposons que vous ajoutiez une case à cocher dans une feuille et que le nom de la forme par défaut et le nom de code par défaut soient CheckBox1. Si vous modifiez ensuite le nom de code du contrôle en tapant chkFinished à côté de (Nom) dans la fenêtre Propriétés, vous devez utiliser chkFinished dans les noms de procédure événement, mais vous devez utiliser CheckBox1 pour renvoyer le contrôle de la collection Shapes ou OLEObject, comme indiqué dans l'exemple suivant.

Private Sub chkFinished_Click() 
    ActiveSheet.OLEObjects("CheckBox1").Object.Value = 1 
End Sub

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.