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 objets type OleObject- Comment insérer un contrôle dans la feuille et lui attacher une macro ?
- Comment ajouter un Label transparent dans la feuille ?
- Comment boucler sur les cases à cocher ?
- Comment ajouter un bouton dynamiquement et y associer une macro ?
- Comment remplir une ComboBox sans doublon ?
- Comment trier le contenu d'un ComboBox par ordre alphabétique ?
- Comment lancer la macro d'un CommandButton depuis une autre macro ?
- Comment insérer un fichier Word dans la feuille de calcul ?
- Comment vérifier si le document Word, inséré dans la feuille, est vide ?
- Comment lancer en mode plein écran une présentation ppt contenue dans une feuille de calcul ?
- Comment insérer un son Wave dans une feuille de calcul ?
- Comment identifier le contrôle utilisé dans la feuille de calcul ?
- Comment gérer les tabulations pour passer d'un TextBox à l'autre, sur la feuille de calcul ?
- Comment regrouper les OptionButton d'une Feuille ?
- Comment faire référence à un contrôle dans une feuille de calcul ?
- Pourquoi mes contrôles se déplacent dans la feuille suite à un aperçu avant impression ?
- Comment sélectionner plusieurs contrôles en même temps sous Excel 2007 ?
- Comment présenter une équation mathématique complexe dans la feuille de calcul ?
- Comment sélectionner le contenu d'un TextBox ?
- Comment lier le contenu de deux TextBox ?
Les contrôles sont disponibles dans la barre d'outils "Boîte à outils contrôles" (ou onglet Développeur/groupe
"Contrôles"/Insérer/"Contrôles ActiveX", pour Excel 2007).
Après avoir ajouté l'objet dans la feuille de calcul, vérifiez que vous êtes bien en mode création.

Faites un clic droit sur le contrôle que vous venez d'insérer dans la feuille et sélectionnez l'option "Visualiser le code" dans
le menu contextuel (ou double cliquez sur le contrôle).
Vous atteignez ainsi le module de la feuille qui contient votre objet.

Le menu déroulant de droite, en haut de la fenêtre de code, liste les évènements utilisables par cet objet.
Les contrôles de la feuille de calcul fonctionnent (pratiquement) de la même manière que ceux
utilisés dans les UserForm.
Il faut simplement faire précéder l'objet par le nom de la feuille :
Option Explicit
'Cet exemple suppose que la feuille nommée "Feuil1" contient :
'Un CommandButton (CommandButton1)
'Un TextBox (TextBox1)
Private Sub CommandButton1_Click()
'Insère la valeur 10 dans le TextBox lorsque vous cliquez
'sur le bouton.
Worksheets("Feuil1").TextBox1.Value = 10
End SubDim Obj As OLEObject
Set Obj = Feuil1.OLEObjects.Add("Forms.Label.1")
With Obj
.Top = 140
.Left = 360
.Name = "NomLabel"
.Width = 60
.Height = 40
.Object.Caption = "DVP"
.Object.BackStyle = 0
.ShapeRange.Fill.Transparency = 1#
End WithCette première version boucle sur tous les contrôles de la feuille active et vérifie s'il s'agit d'une case à cocher.
Sub BoucleCheckBox_V01()
Dim Obj As OLEObject
For Each Obj In ActiveSheet.OLEObjects
If TypeOf Obj.Object Is MSForms.CheckBox Then _
MsgBox Obj.Name & ": " & Obj.Object.Value
Next Obj
End SubVous pouvez aussi utiliser cette deuxième procédure si vous connaissez le nom des CheckBox :
(CheckBox1 à CheckBox3 dans cet exemple)
Sub BoucleCheckBox_V02()
Dim i As Byte
For i = 1 To 3
MsgBox ActiveSheet.OLEObjects("CheckBox" & i).Name & ": " & _
ActiveSheet.OLEObjects("CheckBox" & i).Object.Value
Next i
End SubVous pouvez bien entendu adapter les procédures pour boucler sur les autres types de contrôles.
La procédure crée une nouvelle feuille, ajoute une CommandButton et une macro qui permettra de supprimer le contenu des cellules.
Sub AjoutCommandButton_Feuille()
Dim Ws As Worksheet
Dim Obj As OLEObject
Dim laMacro As String
Dim x As Integer
'Ajout feuille
Set Ws = Sheets.Add
'Ajout CommandButton dans la feuille
Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
With Obj
.Left = 50 'position horizontale
.Top = 50 'position verticale
.Width = 140 'largeur
.Height = 30 'hauteur
.Object.BackColor = RGB(235, 235, 200) 'Couleur de fond
.Object.Caption = "Supprimer données feuille"
End With
'Paramètres pour la création de la macro :
'(suppression contenu cellules)
laMacro = "Sub CommandButton1_Click()" & vbCrLf
laMacro = laMacro & "Cells.Clear" & vbCrLf
laMacro = laMacro & "End Sub"
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
x = .CountOfLines + 1
.InsertLines x, laMacro
End With
End SubLa procédure boucle sur les cellules de la plage A1:A20 et alimente la ComboBox de la Feuil1, sans doublon.
Dim Cell As Range
'Supprime les données existantes dans le ComboBox
Feuil1.ComboBox1.Clear
'Boucle sur les cellules de la plage A1:A20 pour
'alimenter le ComboBox
For Each Cell In Feuil1.Range("A1:A20")
Feuil1.ComboBox1 = Cell
'remplissage sans doublon
If Feuil1.ComboBox1.ListIndex = -1 Then _
Feuil1.ComboBox1.AddItem Cell
Next CellSub TriAlpha_ComboBox()
Dim i As Integer, j As Integer
Dim strTemp As String
'Supprime le contenu du ComboBox
Feuil1.ComboBox1.Clear
'Alimente le ComboBox
Feuil1.ComboBox1.List() = Array("mimi", "nono", "bibi", "fifi", "lolo")
'Tri le contenu du ComboBox par ordre alphabétique
With Feuil1.ComboBox1
For i = 0 To .ListCount - 1
For j = 0 To .ListCount - 1
If .List(i) < .List(j) Then
strTemp = .List(i)
.List(i) = .List(j)
.List(j) = strTemp
End If
Next j
Next i
End With
End SubLa procédure déclenche le code (évènement Click) d'un CommandButton, placé dans la Feuil1.
Application.Run ("Feuil1.CommandButton1_Click")La macro cherche un document Word sur le PC, puis l'insère à l'emplacement de la cellule B10 dans la feuille active.
Sub InsertionDocument_Feuille()
Dim OleObj As OLEObject
Dim Fichier As Variant
Dim PosHori As Double, PosVerti As Double, Largeur As Double, Hauteur As Double
Fichier = Application.GetOpenFilename("Documents Word (*.doc), *.doc")
If Fichier <> False Then
PosHori = Range("B10").Left
PosVerti = Range("B10").Top
Largeur = Range("B10").Width
Hauteur = Range("B10").Height
Set OleObj = ActiveSheet.OLEObjects.Add(Filename:=Fichier, _
Link:=False, displayAsIcon:=True, iconIndex:=0, iconLabel:=Fichier)
With OleObj
.Left = PosHori
.Top = PosVerti
.Width = Largeur
.Height = Hauteur
End With
End If
End SubIndiquez la valeur True pour l'argument Link afin que le document ne soit pas physiquement inséré dans la feuille.
L'icône pointera vers le fichier du disque, sous forme de lien, ce qui limitera la taille de votre classeur.
Sub Verifier_Si_DocumentWord_Vide()
Dim WordApp As Object
Dim WordObj As Shape
'Dans cet exemple l'objet Word et le 1er objet dans la Feuille 1
Set WordObj = Worksheets(1).Shapes(1)
WordObj.OLEFormat.Activate
Set WordApp = WordObj.OLEFormat.Object.Object.Application
WordApp.Visible = False
If WordApp.Selection.Document.Words.Count = 1 Then
'Renvoie 1 si vide
MsgBox "Vide"
Else
MsgBox "Non vide" & vbCrLf & vbCrLf & _
WordApp.Selection.Document.Content
End If
Range("A1").Select
End SubSub LancePresentation_Feuille()
Dim appPPT As Object
Dim Obj As Shape
'Représente le premier objet dans la Feuil11
Set Obj = Worksheets("Feuil1").Shapes(1)
Obj.OLEFormat.Activate
Set appPPT = Obj.OLEFormat.Object.Object.Application
appPPT.ActivePresentation.SlideShowSettings.Run
End Sub
Utilisez le menu Insertion/Objet/Onglet "Nouvel objet".
Sélectionnez "Son wave" dans la liste des types d'objets.
Cliquez sur le bouton OK pour valider.
Effectuez un clic droit sur le nouvel objet inséré.
Sélectionnez l'option "Objet Document Magnétophone".
Puis Ouvrir.
Dans la fenêtre qui s'affiche, utilisez le menu Edition/Insérer un fichier.
Choisissez le fichier wave à insérer dans la feuille.
(Attention à la taille du fichier qui risque d'alourdir votre classeur)
Refermez les boîtes de dialogue.
Un exemple de macro pour déclencher l'objet inséré dans la feuille de calcul.
Sub DeclencheSonWave ()
Worksheets("Feuil1").OLEObjects("objet 1").Verb
End Sub
Lorsque vous avez plusieurs contrôles de même type dans une feuille, et qui effectuent la même opération,
il est possible d'écrire une seule procédure qui va gérer toutes les actions.
Les modules de classes permettent de gérer les groupes de contrôles et d'identifier les évènements qui sont appliqués sur ces objets.
Cet exemple gère les CheckBox placées dans la feuille de calcul "Feuil1".
Une action est déclenchée dès que l'utilisateur clique sur une des cases à cocher.
'--------------------------------------
'à placer dans le module objet ThisWorbook pour que la classe
'soit initialisée lors de l'ouverture du classeur.
Option Explicit
Private Sub Workbook_Open()
Dim Obj As OLEObject
Dim Cl As Classe1
Set Collect = New Collection
'boucle sur les objets de la Feuil1
For Each Obj In Feuil1.OLEObjects
'verifie s'il s'agit d'un Checkbox
If TypeOf Obj.Object Is MSForms.CheckBox Then
Set Cl = New Classe1
Set Cl.CheckBoxGroup = Obj.Object
Collect.Add Cl
End If
Next Obj
End Sub
'--------------------------------------'--------------------------------------
'dans un module standard
Option Explicit
Public Collect As Collection
'--------------------------------------'--------------------------------------
'Dans un module de classe nommé "Classe1"
'
Option Explicit
Public WithEvents CheckBoxGroup As MSForms.CheckBox
'Evenement Click sur les CheckBox de la feuille de calcul.
Private Sub CheckBoxGroup_Click()
'Renvoie le nom et la valeur de la CheckBox cliquée
MsgBox CheckBoxGroup.Name & ": " & CheckBoxGroup.Value
'Exemple qui renvoie dans la colonne A, la valeur de CheckBox
Cells(CheckBoxGroup.TopLeftCell.Row, 1) = CheckBoxGroup.Value
End Sub
'--------------------------------------Vous pouvez intégrer un module de classe qui va prendre en charge le transfert du curseur vers la TextBox suivante, lors de l'utilisation des tabulations :
'--------------------------------------
'à placer dans le module objet ThisWorbook pour que la classe
'soit initialisée lors de l'ouverture du classeur.
Option Explicit
Private Sub Workbook_Open()
Dim Obj As OLEObject
Dim Cl As Classe1
Set Collect = New Collection
'boucle sur les objets de la Feuil1
For Each Obj In Feuil1.OLEObjects
'verifie s'il s'agit d'un Textbox
If TypeOf Obj.Object Is MSForms.TextBox Then
Set Cl = New Classe1
Set Cl.TexteGroup = Obj.Object
Collect.Add Cl
End If
Next Obj
End Sub
'--------------------------------------'--------------------------------------
'dans un module standard
Option Explicit
Public Collect As Collection
'--------------------------------------'dans un module de classe nommé "Classe1"
'
Option Explicit
Public WithEvents TexteGroup As MSForms.TextBox
Private Sub TexteGroup_KeyUp(ByVal KeyCode As _
MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Valeur As Byte
Valeur = TexteGroup.Index
If KeyCode = 9 Then
If Valeur <> Collect.Count Then
With Collect(Valeur + 1).TexteGroup
.Activate
End With
Else
With Collect(1).TexteGroup
.Activate
End With
End If
End If
End Sub
'--------------------------------------
Les contrôles Optionbutton (Boutons d'option) permettent de faire un choix parmi plusieurs options. Lorsqu'une
des options est sélectionnée, les autres sont toutes désactivées.
Utilisez la propriété GroupName pour gérer un groupe d'OptionButton, en Attribuant la même chaine (par exemple "GR1") à
tous les contrôles que vous souhaitez regrouper. Par défaut, la propriété GroupName prend comme valeur le nom de la feuille de calcul.
Cet exemple permet ensuite de retrouver l'OptionButton sélectionné.
Private Sub CommandButton1_Click()
Dim Ctrl As OLEObject
'Boucle sur tous les contrôles de la feuille active
For Each Ctrl In ActiveSheet.OLEObjects
'Vérifie qu'il s'agit d'un OptionButton
If TypeOf Ctrl.Object Is MSForms.OptionButton Then
'Véfifie si l'OptionButton fait partie d'un groupe nommé "GR1"
If Ctrl.Object.GroupName = "GR1" Then
'Affiche le Caption de l'optionButton qui a la valeur True
If Ctrl.Object.Value = True Then
MsgBox Ctrl.Object.Caption
'Sort de la boucle (Il ne peut y a voir qu'une
'réponse à True)
Exit For
End If
End If
End If
Next
End SubLorsque vous écrivez :
'Modifie le texte sur le bouton "Btn1" de la Feuil1
ThisWorkbook.Worksheets("feuil1").Btn1.Caption = "X"Vous faites référence au codeName de la feuille de calcul.
c'est l'équivalent de :
Feuil1.Btn1.Caption = "X"Lorsque vous écrivez :
Dim wsht As Worksheet
Set wsht = ThisWorkbook.Worksheets("feuil1")
wsht.Btn1.Caption = "X"Votre déclaration de variable fait référence à la feuille de calcul
(Dim wsht As Worksheet) et cela provoque une erreur.
Pour faire fonctionner la procédure dans le deuxième exemple, utilisez :
Dim wsht As Object
Set wsht = ThisWorkbook.Worksheets("feuil1")
wsht.Btn1.Caption = "X"Il s'agit d'un problème de paramétrage dans les options du format de contrôle.
Passez en mode création.
Sélectionnez tous les boutons incriminés.
Clic droit sur les contrôles.
Sélectionnez "Format de contrôle" dans le sous menu.
Onglet "Propriétés".
Sélectionnez l'option "Déplacer et dimensionner avec les cellules".
Cliquez sur le bouton OK pour valider.
Passez en mode création (onglet Développeur / groupe Contrôles / bouton "Mode création").
Appuyez sur la touche CTRL puis cliquez sur les différents contrôles.
La multi sélection est ainsi appliquée aux objets cliqués.
Pour effectuer la même opération par macro :
Dim Tableau() As Variant
'Définit les contrôles à modifier
Tableau = Array("CommandButton1", "CommandButton2", "CommandButton3")
'La sélection
Worksheets("Feuil3").Shapes.Range(Tableau).Select
'La modification des éléments sélectionnés
With Selection
'Déplace et dimensionne avec les cellules
.Placement = xlMoveAndSize
'Imprimer l 'objet
.PrintObject = True
End WithIl est possible de rédiger des formules contenant des symboles complexes grâce à l'éditeur d'équations Microsoft.
Dans Excel 2007 :
Sélectionnez l'onglet "Insertion" dans le ruban.
Cliquez sur le bouton "Objet" dans le groupe "Texte".
Dans l'onglet "Nouvel objet", sélectionnez la ligne "Microsoft Editeur d'équations 3.0."
Cliquez sur le bouton OK pour valider.
Insérez l'objet dans la feuille de calcul puis rédigez votre équation à l'aide des symboles
disponibles dans la barre d'outils.
Sélectionnez n'importe quelle cellule pour sortir de l'éditeur.
Pour modifier une équation existante, double cliquez sur l'objet afin d'ouvrir l'éditeur.
Dim Ws As Object
'Définit la feuille contenant le contrôle Textbox
Set Ws = ActiveSheet
With Ws
.TextBox1.Activate
.TextBox1.SelStart = 0
.TextBox1.SelLength = Len(.TextBox1)
End With
Vous disposez de données en A1:A20 et en B1:B20.
Lorsqu'une donnée de la colonne A est saisie dans une zone de texte nommée TextBox1, vous souhaitez que la
donnée de la colonne B s'affiche dans la zone de texte TextBox2 :
Pour réaliser cela, spécifiez une cellule liée dans les propriétés du contrôle TextBox1 (par exemple : C1).
Dans la cellule D1, ajoutez cette formule :
=RECHERCHEV($C$1;A1:B20;2)
Ensuite, spécifiez une cellule liée dans textBox2, vers la cellule D1.
(vous pourrez ultérieurement masquer les colonnes C et D, si besoin).
Maintenant, quand vous renseignez une donnée de la colonne A dans le contrôle TextBox1, la donnée de la colonne B apparait dans le contrôle TextBox2.




