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 :

Parametrer L'action de Mon Menu Contextuel


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Parametrer L'action de Mon Menu Contextuel
    bONjour
    dans mon formulaire "SFsynthèse" jai la liste de tous les procédure crées. Jai créer un menu contextuel: "fiche", "historique" et "suivis" . lorsque je clicke sur une des procédures de mon formulaire, il m'affiche le menu contextuel et je n'ai qu'a choisir la commande approprié et il me l'affiche correctement .

    Voici mon code pour fiche que jai écris dans la partie VBA de mon formulaire et non dans un module.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function OuvrirFiche()
    DoCmd.OpenForm "Procédure_Fiche", , , "idProcédure=" & Me.idProcédure, , acDialog
    End Function
    Le PB, c'est lorsque mon formulaire principal "F-Principal" est lancé, je click sur un bouton et il m'appelle le form "SFsynthèse". Il s'affiche dans un sous formulaire que jai crée. je clicke sur une procédure, et je choisi "fiche" par exemple et access ne reconnait pas "idProcédure". c'est une variable non défini.
    mon formulaire principal n'est conçu par aucune table de ma base.
    Donc je suppose que je dois écris autrement ma condition WHERE.
    comment faire pour que la fiche procédure s'affiche lorsque je me trouve dans mon form principal ??
    un début me sera outil.
    merci pour votre aide.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Cas 1:
    Le code fonctionne quand le formulaire "SFsynthèse" est exploité isolément.

    Cas 2:
    Mais ça ne marche plus quand "SFsynthèse" est utilisé en tant que sous-formulaire.

    Explication:

    En effet, selon le cas, le mot clé Me ne retourne pas le même objet.
    Dans le cas 1, Me retourne une référence au formulaire "SFsynthèse": tout va bien.
    Dans le cas 2, Me retourne une référence au formulaire principal, hors celui-ci ne "connaît" pas idProcédure: l'erreur est "logique".

    Solutions:

    Tu peux modifier ta fonction pour qu'elle tienne compte du "contexte" dans lequel elle s'exécute et, si besoin, faire référence au sous-formulaire pour accéder à idProcédure.
    Supposons que le contrôle qui contient le sous-formulaire s'appelle CtrlSForm, voici la syntaxe pour accéder à idProcédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CtrlSForm.Form.idProcédure
    En utilisant la gestion d'erreur, tu peux envisager de gérer les 2 cas:
    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
    21
    Public Function OuvrirFiche()
        Dim idProc As Long
     
        On Error Resume Next
     
        ' Tenter le cas 1
        idProc = Me.idProcédure
     
        ' En cas d'échec, tenter le cas 2
        If Err.Number <> 0 Then
            Err.Clear
            idProc = Me.CtrlSForm.Form.idProcédure
        End If
     
        ' En cas d'échec, message d'erreur
        If Err.Number <> 0 Then
            Msgbox "Erreur !"
        Else
            DoCmd.OpenForm "Procédure_Fiche", , , "idProcédure=" & idProc, , acDialog
        End If
    End Function
    Une autre solution, plus élégante , consiste à tout gérer directement dans le menu contextuel.
    * avant de faire le ShowPopup, on renseigne la propriété Parameter de tous les contrôles de la barre (menu contextuel), en lui attribuant la valeur de idProcédure.
    * lorsque la procédure OuvrirFiche (ou une autre) est exécutée, il est possible de récupérer la valeur de la propriété Parameter du contrôle (du menu contextuel) qui a été "actionné". Voici la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars.ActionControl.Parameter
    La procédure s'en trouve simplifiée et peut fonctionner quel que soit le niveau d'imbrication du formulaire (sous-sous-sous-...formulaire )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function OuvrirFiche()
        Dim idProc As Long
     
        idProc = cLng( Application.CommandBars.ActionControl.Parameter)
     
        DoCmd.OpenForm "Procédure_Fiche", , , "idProcédure=" & idProc, , acDialog
    End Function

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    salut désolé pour le temps de réponse.
    bon jai essaye tes deux métodes et il n'y a rien qui s'affiche lorsque j'exécute une action par exemple OuvrirFiche().j'ai créer deux menus contextuel "menuSynthèse" et "Visualser/Imprimer" (c'est pour une autreformulaire).

    Dans ta méthode la plus simple (2°) jai rentré dans mon menu "menuSynthèse" la valeur idProcédure dans paramètre pour chaque contrôle. je l'ai écrit le code dans le module du formulaire principal et aussi dans le module mon formulaire" SFsynthèse mais dans les deux cas rien ne se passe.
    Peut être faudrait il faire un lien entre menu et SFsynthèse dans le paramètre je ne sais pas

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Déjà, je mettrai la fonction OuvrirFiche dans un module de code (et pas dans un module de formulaire).

    Citation Envoyé par ingui
    [...]
    je clicke sur une procédure, et je choisi "fiche" par exemple
    Ensuite, peux-tu donner le code la procédure événementielle qui correspond à ça ?
    Je pourrai mieux t'aider...

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    bonjour
    jai mis mon code dans un module de code et toujours rien. jai rajouté le nom de mon menu contextuel pour voir, au cas où,mais rien ne se passe.

    code
    Option Compare Database
    Option Explicit

    Public Function OuvrirFiche()
    Dim idProc As Long
    idProc = CLng(Application.CommandBars("menuSynthèse").ActionControl.Parameter)
    DoCmd.OpenForm "Procédure_Fiche", , , "idProcédure=" & idProc, , acDialog
    End Function

    Public Function OuvrirSuivi()
    Dim idProc As Long
    idProc = CLng(Application.CommandBars("menuSynthèse").ActionControl.Parameter)
    DoCmd.OpenForm "Procédure_Suivi", , , "idProcédure=" & idProc, , acDialog
    End Function

    Public Function OuvrirHistorique()
    Dim idProc As Long
    idProc = CLng(Application.CommandBars("menuSynthèse").ActionControl.Parameter)
    DoCmd.OpenForm "Procédure_historique", , , "idProcédure=" & idProc, , acDialog
    End Function

    je te remercie quand même de ton aide.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Re-Bonjour,

    Je le demande à nouveau (peut-être que ce n'était pas clair ?).

    Peux-tu nous donner le code de la procédure événementielle qui est exécutée lorsqu'on clique sur une des Procédures listées ?

    Théoriquement, c'est cette procédure qui fait apparaître le menu contextuel. Je voudrais voir ça de plus près. Merci.

    Citation Envoyé par =JBO=
    Je pourrai mieux t'aider...

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Voilà,

    De mon côté j'ai fait des test et j'obtiens des résultats satisfaisants.
    Je te donne le code de mes tests (tout est dans un module de code "autonome"):

    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
    21
    22
    Option Compare Database
    Option Explicit
     
    Public Sub OuvrirMenuProcédures(idProc As Long)
        Dim oMenuCtxt As Office.CommandBar, oCtrl As Office.CommandBarControl
     
        Set oMenuCtxt = CommandBars("menuSynthèse")
     
        ' Paramétrer toutes les entrées du menu contextuel
        ' avec l'id passé en argument
        For Each oCtrl In oMenuCtxt.Controls
            oCtrl.Parameter = idProc
        Next oCtrl
     
        ' Afficher le menu contextuel
        oMenuCtxt.ShowPopup
    End Sub
     
    Public Function OuvrirFiche()
        ' Simplement afficher un message pour tester
        MsgBox CommandBars.ActionControl.Caption & " " & CommandBars.ActionControl.Parameter
    End Function
    Pour information, dans le menu contextuel, j'ai renseigné la propriété OnAction des CommandBarButton avec une syntaxe complète.
    Par exemple, pour appeler la procédure OuvrirFiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnAction = "=OuvrirFiche()"

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    je fais une procédure évènementielle sur souris appuyé de mon contrôle zone texte.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    je me suis trompé sur ma procédure événementielle souris appuyé de mon champ. Par exemple pour mon champ "RéfProc" ,j'ai ce code:

    Private Sub RéfProc_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim pt As PointAPI
    Dim NbPointParPouceX As Long, NbPointParPouceY As Long
    'récupère la position de la souris
    GetCursorPos pt
    'Récupère le nombre de pixel par pouce
    NbPointParPouceX = GetDeviceCaps(GetDC(0), 88)
    NbPointParPouceY = GetDeviceCaps(GetDC(0), 90)
    'Affiche la barre de menu à l'endroit souhaité
    CommandBars("menuSynthèse").ShowPopup pt.X - (X / (1440 / NbPointParPouceX)), pt.Y + (RéfProc.Height - Y) / (1440 / NbPointParPouceY)
    End Sub

    Et ensuite lorsque j'appuie sur mon champ, le menu contextuel apparait et je devais normalement cliquer sur un des contrôle de mon menu pour afficher la fiche approprié.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/01/2011, 10h46
  2. Depuis quel ListView mon menu contextuel est il appelé ?
    Par kineton dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2010, 17h59
  3. Un tout petit problème avec mon menu contextuel
    Par jbrasselet dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/10/2007, 15h40
  4. Réponses: 1
    Dernier message: 02/08/2007, 12h42
  5. [C#] Menu contextuel explorer dans mon application
    Par mikyfpc dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/11/2005, 13h45

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