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 :

Autorisation ou non d'un menu contextuel


Sujet :

IHM

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut Autorisation ou non d'un menu contextuel
    Bonjour, j'ai un menu contextuel qui me permet de copier, coller et annuler.

    Le problème est que parfois les champs du formulaire sont vérouillés et si on veut coller alors une erreur se produit et la bdd se ferme.
    Je voudrais savoir si on peut griser (rendre l'action impossible) le coller et le annuler lorsque les champs du formulaire sont vérouillés.

    Ou n'importe quel autre solution pour éviter l'erreur.

    Voici le code si cela peut vous aider :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Public Sub Form_Load()
     
        'Call ContextuelSimple
        With Me
            .ShortcutMenu = True
            .ShortcutMenuBar = "Mnu_CopierCollerAnnuler"
        End With
    End Sub
    Public Sub ContextuelSimple()
        ' ======================================================================================
        ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
        ' Description   : Création d'un menu contrextuel simple
        '=======================================================================================
     
        ' ===== déclaration =====
        Dim cmb As Office.CommandBar
        Dim btn As Office.CommandBarButton
     
        ' ===== suppression de la barre existante =====
        On Error Resume Next
        Application.CommandBars("Mnu_CopierCollerAnnuler").Delete
     
        ' ===== génération du menu contextuel ======
        Set cmb = Application.CommandBars.Add("Mnu_CopierCollerAnnuler", msoBarPopup)
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "copier"
            .Style = msoButtonCaption
            .OnAction = "Macro_Copier"
        End With
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "coller"
            .Style = msoButtonCaption
            .OnAction = "Macro_Coller"
        End With
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "annuler"
            .Style = msoButtonCaption
            .OnAction = "Macro_Annuler"
        End With
     
        ' ===== faire apparaitre le menu contextuel =====
     
        cmb.ShowPopup
     
    End Sub
    Merci d'avance pour vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Pas de solutions toutes faites mais 2 pistes :

    Quand tu dis :

    on veut coller alors une erreur se produit et la bdd se ferme
    Tu n'as aucun message d'erreur ?

    Et en supprimant ?

    Si tu peux récupérer un numéro d'erreur, tu peux la gérer.

    Ou si tu peux tester l'état de ton contrôle, tu peux agir sur la propriété "enabled" de ton bouton.

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Oui je peux tester l'état de mon contrôle mais je ne comprend pas ce que vous voulez dire par agir sur la propriété "enable" de mon bouton. Ce n'est pas un bouton c'est un menu quand on fait un clique droit.

    Vous voyez une solution ?

  4. #4
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With btn
        .Caption = "coller"
        .Enabled = False  'True pour l'activer
        .Style = msoButtonCaption
        .OnAction = "Macro_Coller"
    End With
    Maintenant, le problème, c'est de pouvoir faire un test valable. Si tout tes contrôles sont verrouillés ou non verrouillés, c'est plus ou moins simple.

    Plus compliqués s'ils ont des états différents.

    C'est pour ça que la piste de la gestion d'erreur me semblait plus prometteuse...

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Je préfererais aussi utiliser la gestion d'erreur, dans le message je vois qu'il s'agit de l'erreur 2950. Que faire à partir de ceci ?

  6. #6
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Quelque chose comme ça :

    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
    Sub MaSub()
     
        On Error GoTo GestionErreur
        'Code
        'Code
        Exit Sub
     
    GestionErreur:
     
        Select Case err.Number
     
            Case 2590: MsgBox "Impossible de coller pour l'instant", vbCritical
            Case Else: MsgBox "Erreur inconnue", vbCritical
     
        End Select
     
    End Sub
    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si je peux me permettre d'intervenir dans la discussion.

    La gestion d'erreur dans ce tuto est un peu mal pensée, en effet elle était là pour gérer la suppression du menu avant de le créer.

    Il faut dans tout les cas la gérer comme te le propose Domi2

    Philippe

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Bonjour, j'ai suivi ce que vous m'avez dit mais cela ne fonctionne pas.
    Voici mon code si ça peut vous aider :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Public Sub Form_Load()
     
        'Call ContextuelSimple
        With Me
            .ShortcutMenu = True
            .ShortcutMenuBar = "Mnu_CopierCollerAnnuler"
        End With
    End Sub
    Public Sub ContextuelSimple()
        ' ======================================================================================
        ' Auteur        : Starec - Philippe JOCHMANS - http://starec.developpez.com
        ' Description   : Création d'un menu contrextuel simple
        '=======================================================================================
     
        ' ===== déclaration =====
        Dim cmb As Office.CommandBar
        Dim btn As Office.CommandBarButton
     
        ' ===== suppression de la barre existante =====
     
     
     
        On Error GoTo GestionErreur
        'Code
        'Code
     
     
    GestionErreur:
     
        Select Case Err.Number
     
            Case 2950: MsgBox "Impossible de coller pour l'instant", vbCritical
            Case Else: MsgBox "Erreur inconnue", vbCritical
     
        End Select
     
     
     
     
       ' On Error Resume Next
       ' Application.CommandBars("Mnu_CopierCollerAnnuler").Delete
     
        ' ===== génération du menu contextuel ======
        Set cmb = Application.CommandBars.Add("Mnu_CopierCollerAnnuler", msoBarPopup)
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "copier"
            .Style = msoButtonCaption
            .OnAction = "Macro_Copier"
        End With
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "coller"
            .Style = msoButtonCaption
            .OnAction = "Macro_Coller"
        End With
        Set btn = cmb.Controls.Add(msoControlButton)
        With btn
            .Caption = "annuler"
            .Style = msoButtonCaption
            .OnAction = "Macro_Annuler"
        End With
     
        ' ===== faire apparaitre le menu contextuel =====
     
        cmb.ShowPopup
     
    End Sub

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Ca ne peut pas fonctionner...

    Tu dois mettre la gestion d'erreur dans la procédure/fonction ou l'erreur se produit et non à la construction du menu.

    Ce doit être ta procédure ou fonction "Macro_Coller".

    De plus, regarde mieux l'exemple de code. La gestion se place en fin de procédure, précédée d'un "Exit Sub" ou "Exit Function", sinon tu vas exécuter ta gestion d'erreur même quand il n'y en a pas !

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Ok mais comment je fais si j'utilise des macros et non des procédures pour les fonctions copier coller et annuler ?

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Tu les enregistres en VBA. Tu les sélectionnes, Enregistrer sous, et dans la boîte de dialogue tu choisis comme module.

    Cela va te générer le code VBA correspondant (pas forcément très propre, mais fonctionnel).

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 272
    Points : 100
    Points
    100
    Par défaut
    Tout ça est fait mais je n'arrive pas à comprendre pourquoi mon code prend en compte les macros à la place des modules vba.

    Pouvez-vous me dire si cette partie de code est correctement écrite pour appeller un module et pas une macro ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OnAction = "Macro_Copier"

  13. #13
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Si tu as fait une procédure (Sub)
    .OnAction = "=NomDeTaProcedure"
     
    'Si c'est une fonction (Function)
    .OnAction = "=NomDeTaFonction()"
    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2014, 14h49
  2. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  3. [Plugin eUML2] Menu contextuel non modifié
    Par 19oj19 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 16/04/2008, 14h39
  4. Menu contextuel pour une cellule donnée et non l'ensemble
    Par roudy78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/07/2007, 14h44
  5. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

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