Qules problèmes pour l'utilisation de certaines API's sous VBA

cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 avril 2017 - 13 mars 2009 à 11:45
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 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  ?

Je lui devrai ma reconnaissance éternelle

Merci d'avance

InfOrom

3 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
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
0
cs_inforom Messages postés 36 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 12 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.

Je te remercie quand même

InfOrom
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
14 mars 2009 à 12:30
Désolé, je n'ai pas la version 2007.

Amicalement
0
Rejoignez-nous