Qules problèmes pour l'utilisation de certaines API's sous VBA
cs_inforom
Messages postés36Date d'inscriptionmercredi 8 octobre 2008StatutMembreDernière intervention12 avril 2017
-
13 mars 2009 à 11:45
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 2010
-
14 mars 2009 à 12:30
Bonjour à tous....
J'ai déja posté quelques messages retraçant mes difficultés concernanbt l'utilisation des API's dan sVBA (EXCEL).
Mon pb de départ: faire apparaître un MENU (tout bêtement) tout en travaillant en plein écran (à cause d'EXCEL 2007).
J'ai essayé successivement:
- boite de dialogue modeless( par VBA) avec création d'un menu (par API) et sous-classement: en modeless, je perds le contrôle
- création d'une fenêtre ( CreateWindowEx) .. elle ne reçoit pas les messages
- Recherche des fenêtre filles de l'application principale (hInstance), ou de son thread... pour localiser la barre de menus principale et la modifier, puis la contrôler directement par les API's.. je ne trouve aucune fenêtre ayant un menu (GetMenu)
- mise en place d'un hook souris pour déterminer le handle de la fenêtre contenant ce menu "à la main": SetWindowsHookEx me renvoie systématiquement 0...
Ca fait trois semaines que je pédale sans rien produire ... Je suis désespéré: mon client a les boules et je vais devoir me serrer la ceinture le mois prochain...
Alors HELP!!!!: quelqu'un peut-il m'indiquer quelles limitations, quelles contraintes, enfin quels sont les problèmes à connaître quand on travaille en VBA ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 13 mars 2009 à 20:19
Bonjour
Il n'y a aucun problème pour créer un CommandBar flottant sous Excel 2003 en plein écran.
Colle le code suivant dans un module, passe en plein écran et exécute la macro ajoutCommandBar()
Option Explicit
Sub ajoutCommandBar()
' création d'un commandBar
Dim cb As CommandBar, cmdBarCtl As CommandBarControl, i As Byte, w As Integer
For Each cb In CommandBars
If cb.Name = "menu" Then cb.Delete
Next
Set cb = CommandBars.Add(Name:="menu", Position:=msoBarFloating, temporary:=True)
Set cmdBarCtl = cb.Controls.Add(Type:=msoControlDropdown, temporary:=True)
With cmdBarCtl
For i = 1 To 2
.Caption = "Liste déroulante"
.AddItem "Element n° " & i
.DropDownLines = 10
.DropDownWidth = 100
.ListIndex = 0
.OnAction = "onMenu"
Next
End With
Set cmdBarCtl = cb.Controls.Add(Type:=msoControlButton, temporary:=True)
ajoutMenuItem "menu", False, "enregistrer", "onEnreg", 3
ajoutMenuItem "menu", False, "Imprimer", "onImprim", 4
With cb
.Visible = True
.Protection = msoBarNoChangeVisible
.Width = 100
End With
End Sub
Sub ajoutMenuItem(cbName As String, isNewGroup As Boolean, legende As String, nomMacro, faceId As Long)
' création de boutons
Dim newitem As CommandBarControl
Set newitem = CommandBars(cbName).Controls.Add(Type:=msoControlButton)
With newitem
.BeginGroup = isNewGroup
.Caption = legende
.faceId = faceId
.OnAction = nomMacro
End With
End Sub
Sub onMenu()
' événement click sur un élément de menu
Dim ind As Integer
ind = CommandBars("menu").Controls(1).ListIndex
MsgBox "element n° " & ind
End Sub
Sub onEnreg()
' événement click sur le bouton enregistrement
MsgBox "bouton enregistrement"
End Sub
Sub onImprim()
' événement click sur le bouton impression
MsgBox "bouton impression"
End Sub
cs_inforom
Messages postés36Date d'inscriptionmercredi 8 octobre 2008StatutMembreDernière intervention12 avril 2017 14 mars 2009 à 07:56
Merci, Orohena, pour ta collaboration, mais le problème est que, sous EXCEL 2007, les barres de commandes créées avec le VBA sont intégrées dans le 'ruban'..
Dans mon appli l'utilisateur n'utilise pratiquement plus les menus EXCEL. Avec ce ruban, il faut aller dans compléments, puis rechercher le menu spécifique avant de commencer à voir les options... c'est trop long, et en plus ce foutu ruban bouffe la visibilité d'une partir non négligeable de la feuille de travail. Jusqu'ici, donc, je réduisais la barre 'Feuille de calcul' et rajoutais les menus de l'appli.
Mais aujourd'hui je dois travailler en 'plein écran' pour ne plus voir le ruban. Dans les versions précédentes, une barre de commandes crrée en VBA restait visible même en plein écran, et je pouvais même la remonter tout en haut de l'écran avec les API's (on peut récupérer le handle simplement par le nom qu'on lui a donné). Avec 2007: la barre de commandes crrée avec VBA reste confinée dans le ruban, et je ne suis même pas sur qu'il y ait quelque part une fenêtre qui lui corresponde (j'ai bien trouvé une fenêtre pour le ruban, mais aucune fenêtre fille à l'intérieur).
En résumé la barre de commandes créée en VBA n'est pas accessible en plein écran, sous Excel 2007.