|
LES CONTRÔLES DES BARRES D'OUTILS
Vous avez enfin ajouté une barre d'outils personnalisées,
mais sans boutons ou autres contrôles, elle est bien inutile. En
général, vous ajoutez un bouton, mais vous pouvez également
ajouter une zone de liste modifiable, une zone de texte ou un sous-menu
personnalisé.
L'ensemble de ces contrôles est désigné par la collection
CommandBarControls.
Pour ajouter un contrôle, il faut
d'abord faire référence à l'ensemble des contrôles
de la barre (même si elle est vide), puis ajouter :
Application.CommandBars("Standard").Controls.Add
[Type], [Id], [Parameter], [Before], [Temporary]
Les paramètres entre crochets ne sont pas obligatoires, si elles
ne sont pas indiquées, la valeur par defaut est appliquée
- Type indique le type de contrôle
: msoControlButton (bouton), msoControlEdit (zone
de texte), msoControlDropdown (zone de
liste déroulante), msoControlComboBox (zone
de liste modifiable) ou msoControlPopup (sous-menu).
Par défaut : msoControlButton
- Id est un nombre entier représentant
un contrôle prédéfini. Chaque bouton des barres
d'outils prédifinis a un ID propre. Par défaut, c'est
un bouton vide.
- Parameter, vous pouvez stocker dans
ce paramètre les donnés que vous voulez (pour pouvoir
les relire ensuite).
- Before, position du nouveau contrôle,
il se placera alors devant le contrôle dont la position est le
numéro indiqué. Par défaut : à la fin de
le barre de commande
- Temporary doit être à True pour
que le contrôle soit temporaire, dans ce cas il disparaît à la
fermeture d'Excel. Par défaut : False.
Exemple créant une barre d'outils et y ajoute les boutons couper,copier,
coller :
Sub NouvBarre()
Dim MaBarre As CommandBar
Dim NouvBtn As CommandBarButton
Set MaBarre = CommandBars.Add("BarrePerso")
Set NouvBtn = MaBarre.Controls.Add(msoControlButton,
CommandBars("Standard").Controls("Couper").ID) '
Set NouvBtn = MaBarre.Controls.Add(msoControlButton,
Application.CommandBars("Standard").Controls("Copier").ID)
Set NouvBtn = MaBarre.Controls.Add(msoControlButton,
Application.CommandBars("Standard").Controls("Coller").ID)
MaBarre.Visible = True
End Sub
Pour supprimer un contrôle :
CommandBars("BarrePerso").Controls(3).Delete
Après avoir ajouté un bouton personnalisé, il vous
faut également indiquer son étiquette (caption), son image,
son état (enfoncé ou relevé), son style, une référence
pour le retrouver ensuite et surtout la procédure qui devra s'exécuter
lorsque l'on clique dessus. Dans ce cas vous devez lors de la création
du contrôle l'affecter à une variable ainsi :
Dim MaBarre As CommandBar
Dim NouvBtn As CommandBarButton
Set MaBarre = CommandBars.Add("BarrePerso")
Set NouvBtn = MaBarre.Controls.Add
Maintenant vous pouvez affecter les différentes propriétés
que vous voulez :
With NouvBtn
.Caption = "Mon bouton"
.FaceId = 59
.OnAction = "Ma_macro"
.State = msoButtonUp
.Style = msoButtonIconAndCaptionBelow
.Tag = "btn1"
.TooltipText = "ceci
est la bulle d'aide"
End With
Ce qui nous donne cette procédure :
Sub NouvBarre()
Dim MaBarre As CommandBar
Dim NouvBtn As CommandBarButton
Set MaBarre = CommandBars.Add("BarrePerso")
Set NouvBtn = MaBarre.Controls.Add
With NouvBtn
.Caption = "Mon bouton"
.FaceId = 59
.OnAction = "Ma_macro"
.State = msoButtonUp
.Style = msoButtonIconAndCaptionBelow
.Tag = "btn1"
.TooltipText = "ceci
est la bulle d'aide"
End With
MaBarre.Visible = True
End Sub
Sub Ma_macro()
Dim MonBtn As CommandBarButton
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, "btn1")
MonBtn.State = Not MonBtn.State
End Sub
Pour affecter une image à un bouton, vous pouvez :
- copier l'image depuis un autre bouton puis lui coller
Sub ChangeFace()
Dim MonBtn As CommandBarButton, BtnCopie As CommandBarButton
Set BtnCopie = CommandBars("Standard").FindControl(,
CommandBars("Standard").Controls("Couper").ID)
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, "btn1")
BtnCopie.CopyFace
MonBtn.PasteFace
End Sub
- copier une image de 16x16 situé sur une feuille puis lui coller
Sub ChangeFace()
Dim MonBtn As CommandBarButton
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, "btn1")
ActiveSheet.Shapes(1).Copy
MonBtn.PasteFace
End Sub
- attribuer un numéro d'image prédéfini. L'exemple
suivant affiche sur une feuille toutes les images à votre disposition
et leur numéro.
Sub ChangeFace(iNo As Integer, strTag as
String)
Dim MonBtn As CommandBarButton
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, strTag )
MonBtn.FaceId = iNo
End Sub
Sub Essai()
ChangeFace 1000, "btn1"
End Sub
Pour lancer une procédure ayant besoin d'une indication, vous
pouvez utiliser une zone de texte comme dans l'exemple suivant, la macro "Ma_macro" se
lance dès que l'utilisateur appuie sur la touche Entrée après
avoir tapé son texte :
Sub AjoutZoneTexte()
Dim MaBarre As CommandBar
Dim MonTxt As CommandBarComboBox
Set MaBarre = CommandBars("BarrePerso")
Set MonTxt = MaBarre.Controls.Add(msoControlEdit)
MonTxt.OnAction = "Ma_macro"
MonTxt.Tag = "txt1"
End Sub
Sub Ma_macro()
Dim MonBtn As CommandBarComboBox, strTxt As String
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, "txt1")
strTxt = MonBtn.Text
MsgBox strTxt
End Sub
|
|
V.
Une zone de liste déroulante
|
Vous donnez un choix à l'utilisateur, dès que celui-ci
sélectionne l'un d'entre eux, la procédure attachée
se lance (ici Ma_macro).
Sub AjoutZoneTexte()
Dim MaBarre As CommandBar
Dim MonTxt As CommandBarComboBox
Set MaBarre = CommandBars("BarrePerso")
Set MonTxt = MaBarre.Controls.Add(msoControlDropdown)
With MonTxt
.OnAction = "Ma_macro"
.Tag = "lst1"
.AddItem "Choix 1"
.AddItem "Choix 2"
.AddItem "Choix 3"
.AddItem "Choix 4"
End With
End Sub
Sub Ma_macro()
Dim MonBtn As CommandBarComboBox,
strTxt As String
Set MonBtn = CommandBars("BarrePerso").FindControl(,
, "lst1")
strTxt = MonBtn.Text
MsgBox strTxt
End Sub
|