VBA Types de contrôles/Events
Dernière réponse : dans Programmation
Bonjour,
Je voudrais afficher les Barres de commandes ainsi que leurs controles avec ce code :
Le problème est que le Type est un indice, et MsoBar/ControlType n'est pas un vrais enum, donc pas de For Each ni MsoBarType(index), j'aimerais récupérer le nom du type des barres et des contrôles en toutes lettres, existe t'il un moyen à part une suite infinie de IF ?
D'ailleurs si l'on ne peut réorganiser ni les onglets ni les contrôles à quoi cela sert-il ? Peut on accéder aux évènements soulevées par les contrôles à travers CommandeBar(index).Controls(index) ?
J'en profite pour parler d'un deuxiéme probléme, j'ai ce code là :
Module de classe clsCBEvents:
Ce qui est hallucinant c'est que colCBars_OnUpdate() est bien soulevée mais pas les autres !
Où est mon erreur ?
Merci d'avance !
Je voudrais afficher les Barres de commandes ainsi que leurs controles avec ce code :
Sub ListerBarres() Dim cbar As CommandBar Dim Ctrl As CommandBarControl Cells(1, 1) = "Nom de la barre d'outils" Cells(1, 2) = "Nom local de la barre d'outils" Cells(1, 3) = "Index" Cells(1, 4) = "Type" For Each cbar In Application.CommandBars x = x + 1 Cells(1, 1).Offset(x, 0) = cbar.Name Cells(1, 2).Offset(x, 0) = cbar.NameLocal Cells(1, 3).Offset(x, 0) = cbar.Index Cells(1, 4).Offset(x, 0) = cbar.Type For Each Ctrl In Application.CommandBars(cbar.Index).Controls x = x + 1 Cells(1, 2).Offset(x, 0) = Ctrl.Caption Cells(1, 3).Offset(x, 0) = Ctrl.Index Cells(1, 4).Offset(x, 0) = Ctrl.ID Cells(1, 5).Offset(x, 0) = Ctrl.Type Next Next End Sub
Le problème est que le Type est un indice, et MsoBar/ControlType n'est pas un vrais enum, donc pas de For Each ni MsoBarType(index), j'aimerais récupérer le nom du type des barres et des contrôles en toutes lettres, existe t'il un moyen à part une suite infinie de IF ?
D'ailleurs si l'on ne peut réorganiser ni les onglets ni les contrôles à quoi cela sert-il ? Peut on accéder aux évènements soulevées par les contrôles à travers CommandeBar(index).Controls(index) ?
J'en profite pour parler d'un deuxiéme probléme, j'ai ce code là :
Option Explicit Dim clsCBClass As New clsCBEvents Sub InitEvents() Dim cbrBar As Office.CommandBar Set cbrBar = CommandBars(11) ' ("Formatting") With cbrBar Set clsCBClass.cmdBold = .Controls(3) ' ("Bold") ' Set clsCBClass.cmdItalic = .Controls("&Italic") ' Set clsCBClass.cmdUnderline = .Controls("Underline") ' Set clsCBClass.cboFontSize = .Controls("&Font Size:") End With Set clsCBClass.colCBars = CommandBars End Sub
Module de classe clsCBEvents:
Public WithEvents colCBars As Office.CommandBars Public WithEvents cmdBold As Office.CommandBarButton Public WithEvents cmdItalic As Office.CommandBarButton Public WithEvents cmdUnderline As Office.CommandBarButton Public WithEvents cboFontSize As Office.CommandBarComboBox Private Sub cboFontSize_Change(ByVal Ctrl As Office.CommandBarComboBox) MsgBox ("Mourf !") End Sub Private Sub cmdBold_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox ("Mourf !") End Sub Private Sub cmdItalic_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox ("Mourf !") End Sub Private Sub cmdUnderline_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) MsgBox ("Mourf !") End Sub 'Private Sub colCBars_OnUpdate() ' MsgBox ("Mourf !") 'End Sub
Ce qui est hallucinant c'est que colCBars_OnUpdate() est bien soulevée mais pas les autres !
Où est mon erreur ?
Merci d'avance !
Autres pages sur : vba types controles events
Lassé par la pub ? Créez un compte
Salut,
Pour avoir le nom en fonction du type:
Je n'ai pas trop compris ton 2è problème.
Pour avoir le nom en fonction du type:
Function CBGetCBType(cbrBar As CommandBar) As String
' Returns a string representing the command bar type.
Dim strCBType As String
Select Case cbrBar.Type
Case msoBarTypeNormal
strCBType = "Toolbar"
Case msoBarTypeMenuBar
strCBType = "Menu bar"
Case msoBarTypePopup
strCBType = "Popup menu"
End Select
CBGetCBType = strCBType
End Function
Je n'ai pas trop compris ton 2è problème.
Bonjour,
Merci pour la fonction OmaR, grâce à son nom j'ai réussi à trouver sa petite soeur pour les contrôles
Et oui en effet, je suis désolé j'ai fais quelques test avant de venir ici, pour ne pas dire n'importe quoi (
), donc voici le code :
Module de classe clsCBEvents:
Le résultat obtenu, colCBars_OnUpdate() est bien appelée (trop bien même), alors que, lorsque je la commente et que j'appuie sur mettre en gras, souligner etc ... rien pas de MsgBox ...
Merci pour la fonction OmaR, grâce à son nom j'ai réussi à trouver sa petite soeur pour les contrôles
Rakipu a dit :
(Oui, surtout que dans le code que tu nous donne la méthode est commentée!)Et oui en effet, je suis désolé j'ai fais quelques test avant de venir ici, pour ne pas dire n'importe quoi (
), donc voici le code :Hrusdik a dit :
Option Explicit
Dim clsCBClass As New clsCBEvents
Sub InitEvents()
Dim cbrBar As Office.CommandBar
Set cbrBar = CommandBars(11) ' ("Formatting")
With cbrBar
Set clsCBClass.cmdBold = .Controls(3) ' ("Bold")
Set clsCBClass.cmdItalic = .Controls("&Italic")
Set clsCBClass.cmdUnderline = .Controls("Underline")
Set clsCBClass.cboFontSize = .Controls("&Font Size:")
End With
Set clsCBClass.colCBars = CommandBars
End Sub
Module de classe clsCBEvents:
Public WithEvents colCBars As Office.CommandBars
Public WithEvents cmdBold As Office.CommandBarButton
Public WithEvents cmdItalic As Office.CommandBarButton
Public WithEvents cmdUnderline As Office.CommandBarButton
Public WithEvents cboFontSize As Office.CommandBarComboBox
Private Sub cboFontSize_Change(ByVal Ctrl As Office.CommandBarComboBox)
MsgBox ("Mourf !")
End Sub
Private Sub cmdBold_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MsgBox ("Mourf !")
End Sub
Private Sub cmdItalic_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MsgBox ("Mourf !")
End Sub
Private Sub cmdUnderline_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
MsgBox ("Mourf !")
End Sub
Private Sub colCBars_OnUpdate()
MsgBox ("Mourf !")
End Sub
Le résultat obtenu, colCBars_OnUpdate() est bien appelée (trop bien même), alors que, lorsque je la commente et que j'appuie sur mettre en gras, souligner etc ... rien pas de MsgBox ...
Essaie de regarder cette KB:
http://support.microsoft.com/kb/826931
Il semblerait qu'il faille juste définir une valeur à l'élément Tag de ton bouton.
http://support.microsoft.com/kb/826931
Il semblerait qu'il faille juste définir une valeur à l'élément Tag de ton bouton.
J'ai essayé et ça n'a pas marché... Mais je me pose une question est-ce que mon code marche chez quelqu'un ? Et est-il possible que puisqu'on ne peut plus toucher aux commandbar dans Office2007, on ne peut accéder à leurs évents ? Ainsi les objets définis par WithEvents sont forcement de nouveaux objets avec leurs propres évènements indépendants ? Et comme j'essaye d'acceder à la commandbar 11 ("Formatting"), je n'y ai pas droit donc les objets crées sont forcement indépendant ?
Du délire ?
Comment-est ce que vous faites pour handler l'évènement d'un bouton en VBA ?
EDIT : Je viens de tester ce code :
Les évènements de mon bouton perso sont bien soulevées, pourtant le code est le même ( le Tag ne change rien).
Quel qu'un a des infos là dessus ?
Du délire ?
Comment-est ce que vous faites pour handler l'évènement d'un bouton en VBA ?
EDIT : Je viens de tester ce code :
Sub InitEvents() Dim cbrBar As CommandBar Set cbrBar = CommandBars(11) With cbrBar Set clsCBClass.cmdBold = CommandBars("Perso").Controls(1) Set clsCBClass.cmdItalic = .Controls("&Italic") Set clsCBClass.cmdUnderline = .Controls("Underline") Set clsCBClass.cboFontSize = .Controls("&Font Size:") End With Set clsCBClass.colCBars = CommandBars End Sub
Les évènements de mon bouton perso sont bien soulevées, pourtant le code est le même ( le Tag ne change rien).
Quel qu'un a des infos là dessus ?
Moi non plus c'est bien cela le problème xD
"Hi,
I've got bad news for you..
VBA (and VB6) doesn't support multievent handling.. You can not handle multiple events by one procedure and you can not use multiple handlers on one event.. This is possible in VB.NET with AddHandler and RemoveHandler..
VB6 could help you in this case, when you make your checkboxes dynamically and give them the same name and different indexes.. In this case, you can have one handling sub, BUT VBA in excel doesn't support indexes for controls, as VB6 does..
"
Source : http://www.programmersheaven.com/mb/vba/323244/323244/c...
Moi qui pensais que VB6 mourrait avec le la sortie du .NET 3.5 ... On ouvre Office 2010 et... surprise IDE n'a pas changé d'un poil ^^
Bon je pense que l'on peut en conclure qu'il est impossible sous Office 2007 (par conséquent 2010 ?) en VBA de modifier/cacher/supprimer les CommandBar qui sont accéssibles que par VSTO et handler les événements des Contrôles sur les quels on a plus la main ...
Le VBA est mort vive le VSTO !
Merci pour votre aide !
"Hi,
I've got bad news for you..
VBA (and VB6) doesn't support multievent handling.. You can not handle multiple events by one procedure and you can not use multiple handlers on one event.. This is possible in VB.NET with AddHandler and RemoveHandler..
VB6 could help you in this case, when you make your checkboxes dynamically and give them the same name and different indexes.. In this case, you can have one handling sub, BUT VBA in excel doesn't support indexes for controls, as VB6 does..
"Source : http://www.programmersheaven.com/mb/vba/323244/323244/c...
Moi qui pensais que VB6 mourrait avec le la sortie du .NET 3.5 ... On ouvre Office 2010 et... surprise IDE n'a pas changé d'un poil ^^
Bon je pense que l'on peut en conclure qu'il est impossible sous Office 2007 (par conséquent 2010 ?) en VBA de modifier/cacher/supprimer les CommandBar qui sont accéssibles que par VSTO et handler les événements des Contrôles sur les quels on a plus la main ...
Le VBA est mort vive le VSTO !
Merci pour votre aide !
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumVba type
- ForumVba incompatibilite de type
- ForumEcart type tableau vba
- ForumVba incompatibilite type tableau
- ForumVba erreur de type 13
- ForumVba excel incompatibilite de type.
- ForumVba access erreur de type
- ForumVba incompatibilité de type
- ForumErreur incompatibilite de type vba
- ForumVba excel incompatibilité de type
- Voir plus
):