IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Ajout de bouton de commandes dans la barre de menus [À faire]


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Points : 7
    Points
    7
    Par défaut Ajout de bouton de commandes dans la barre de menus
    Bonjour !

    Voilà mon problème : je souhaite insérer une requête en tant que commande dans un sous-menu de ma barre de menus personnalisée.

    Sans passer par VBA, je sais faire tout ça : en personnalisant la barre d'outils et en ajoutant une requête au choix parmi "Toutes les requêtes" dans l'onglet Commandes...

    En passant par VBA, c'est le drame...
    Je tente de digérer l'aide depuis une demi-journée et sans succès.
    Je ne saisis pas les différences subtiles qu'il existe entre les CommandBars, CommandBar, CommandBarControls et CommandBarControl.

    Si jamais quelqu'un manie la chose avec dextérité alors je suis prenante.

    Voici des infos complémentaires pour adapter le code à mon application.
    Un Menu "Appli GRH" qui se trouve dans la barre de menu (à droite de l'aide).
    Ce Menu contient 4 sous-menus ; le dernier s'intitule "Requêtes".
    Ce dernier menu contient 12 sous-menus ; le dernier s'intitule "Personnalisées".
    C'est au sein de ce dernier sous-menu de sous-menu de menu que je souhaite ajouter une requête dont le nom est "quer_name".

    Merci énormément à ceux qui me liront et auront THE réponse !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Bon, finalement j'ai trouvé des infos claires sur le lien suivant:
    http://access.seneque.free.fr/barre_de_menus.htm

    Le tout est de commencer par cocher la référence à Microsoft Office (au moins version 9).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim CB As CommandBar
    Dim CBBouton As CommandBarControl
    Set CB = CommandBars.Add(CB_Nom)
    With CB
        Set CBBouton = .Controls.Add(msoControlPopup)
        With CBBouton
        .Caption = "Rien"
        .Enabled = True
        End With
    End With
    CB.Visible = True
    CB.Position = msoBarTop
    Ce code marche chez moi, pour le perfectionner, regarde le lien plus haut.
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Effectivement le code que tu m'as posté fonctionne...
    J'étais parvenue à faire ce genre de choses.

    Seulement, dans mon cas particulier, je souhaite insérer une commande dans un sous-menu de sous-menu de menu qui se trouve dans la barre de menus.

    Et ça, je n'y parviens pas !!!

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 37
    Points : 228
    Points
    228
    Par défaut
    Bonjour,

    une petite adaptation en passant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim cb As Object
     
        Set cb = CommandBars("Appli GRH").Controls("Requêtes").Controls("personnalisé").Controls.Add
    attention aux noms contenant des espaces, peut-être faudra-t-il utiliser des crochets pour [Appli GRH]

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Bon, je vois que Drosera a été plus rapide que moi.C'est effectivement la marche à suivre.
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

  6. #6
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    CommandBar
    "Représente la barre de commandes de l'application conteneur. L'objet

    > Les barres de menus, les barres de menus contextuels et les barres d'outils sont des objet CommandBar.
    >Ces objets sont regroupés dans une collection nommée CommandBars

    CommandBars
    Collection d'objets CommandBar qui représente les barres de commandes dans l'application
    Pour renvoyer un seul objet CommandBar, utilisez CommandBars(index), index étant le nom ou le numéro d'index d'une barre de commandes
    Par exemple pour renvoyer la barre de menu qui contient tes sous menus, tu utilises le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars.Item ("Nom de ta barre de Menu")

    Maintenant que tu sais renvoyer une barre de menus, voyons les contrôles :

    Il en existe plusieurs sortes :
    - des boutons de commande (le plus courant, tu cliques dessus pour une déclencher une action donnée),
    - des zones de listes modifiables (que tu ne peux créer qu'en VBA),
    - des menus contextuels (qui servent à afficher un sous menu dans une barre de commande; les contrôles menus contextuels ne doivent pas être confondus avec les barres de menus contextuel)
    - il existe encore d'autres type de contrôle (voir dans l'aide Access)

    Si j'ai bien compris ton pb, tu possèdes une barre de menu (appelons-la BrMn) qui possède un contrôle menu contextuel "Appli GRH".


    Pour renvoyer "Appli GRH" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars.Item("BrMn").Controls.Item ("Appli GRH")

    Pour créer "Appli GRH" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars.Item("BrMn").Controls.Add "Appli GRH", msoControlPopup
    Chaque contrôle menu contextuel contient un objet commandbar (= le sous menu)

    Donc le contrôle "Appli GRH" contient une barre de commande qui contient elle-même 4 contrôles menus contextuel dont le dernier s'intitule "Requêtes".

    Le contrôle "Requêtes", en tant que contrôle menu contextuel, contient une barre de commande qui contient elle-même 12 contrôles menus contextuel dont le dernier s'intitule "Personnalisées".
    Enfin "Personnalisées" contient une barre de commande qui contient un contrôle qui est un simple bouton, nommé "quer_name".


    Voici comment créer "quer_name"

    'ce code sert à créer ton bouton "quer_name"
    ' je pars du principe que les menus et sous menus sont déjà créés...
    'Si tu veux les créer dis-le moi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Dim cb As CommandBar
    Dim cbctl As CommandBarButton
     
    'renvoie la barre de menu principale via cb
    Set cb = Application.CommandBars.Item("BrMn")
     
    'crée un bouton à la position indiquée
    Set cbctl = cb.Controls.Item("Appli GRH") _
                    .CommandBar.Controls.Item("Requêtes") _
                    .CommandBar.Controls.Item("Personnalisées") _
                    .CommandBar.Controls.Add(msoControlButton)
     
    'nomme le bouton créé
    cbctl.Caption = "quer_name"
     
    'attribue une action au bouton créé
    cbctl.OnAction = "=FonctionPourLancerTonAction()"
     
    ' FonctionPourLancerTonAction() est une Public function placée dans un module indépendant _
    et qui définit l'action à accomplir sur clic du bouton "quer_name"
    Voilà j 'espère que j'ai pas fait d'erreurs et que je t'ai aidée...
    (\ _ /)
    (='.'=)
    (")-(")

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Hello !

    Ta solution fonctionne bien...
    Merci!

    Cependant, il y a encore un truc qui coince : la propriété OnAction...
    Etant donné que je veux que ce bouton ouvre une requête pré-existante, j'ai créé la Public Sub suivante, dans un module indépendant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Sub ouvrir_requ(nom_requête As String)
    DoCmd.OpenQuery (nom_requête)
    End Sub
    Et j'ai adapté ton code avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'attribue une action au bouton créé
    cbctl.OnAction = "=ouvrir_requ(quer_name)"
    Malheureusement, ça ne fonctionne pas...

    Voivi le message d'erreur que j'obtiens en cliquant sur le bouton :
    L'expression entrée comporte un nom de fonction introuvable.
    Si jamais quelqu'un a une idée... (?)
    Merci en tous cas !!!

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 37
    Points : 228
    Points
    228
    Par défaut
    Bonjour,

    il faut une fonction et non une procédure, donc Public Function à la place de Public Sub

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Re !
    Merci Merci Merci !!!
    Pas maligne moi des fois...

    Tout fonctionne à merveille !

    Juste une modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'attribue une action au bouton créé
    cbctl.OnAction = "=ouvrir_requ(" & Chr(34) & quer_name & Chr(34) & ")"

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Utilisation de ""
    Tu peux te passer du chr(34) si tu utilises les doubles guillemets (ici en fait quatre puisqu'il y a ceux de l'ouverture de ta chaine de caractère).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cbctl.OnAction = "=ouvrir_requ("""" & quer_name &""""")"
    "I tried so hard and got so far
    But, in the end, it doesn't even matter"
    In the End, Linkin Park

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Ajouter des boutons commandes dans la barre de menus
    Par Serge77144 dans le forum Access
    Réponses: 2
    Dernier message: 17/05/2009, 09h38
  2. bouton de commande dans le formulaire
    Par bzhmorgane dans le forum IHM
    Réponses: 5
    Dernier message: 25/05/2007, 15h29
  3. Création d'un bouton de commande dans un formulaire
    Par annelaure dans le forum Access
    Réponses: 5
    Dernier message: 30/05/2006, 11h48
  4. Réponses: 4
    Dernier message: 02/06/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo