FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- 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
Sub
Dim
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
With
Cette 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
Sub
Vous 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
Sub
Vous 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
Sub
La 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
Cell
Sub
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
Sub
La 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
Sub
Indiquez 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
Sub
Sub
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
Sub
Lorsque 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
With
Il 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.