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 :

[Formulaire]Connaître le mode données du formulaire actif ?


Sujet :

IHM

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut [Formulaire]Connaître le mode données du formulaire actif ?
    Bonjour,

    J'ai cherché partout pour l'instant sans résultat.

    J'aurai besoin d'insérer dans un code une condition portant sur le "mode données" sur lequel est ouvert le formulaire actif (ajout, modification ou lecture seule).

    Une ligne du genre :
    If Screen.ActiveForm. .............. = "lecture seule" Then etc

    Quelqu'un peut-il me sortir de l'ornière ?

    Merci d'avance.

  2. #2
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Salut, je pense que tu devras composer avec les propriétés Ajout autorisé et Modif autorisée(Booléens).

    cf l'aide access.
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  3. #3
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonsoir,
    Dans du code VBA, tu peux contrôler "l'etat" du Form....du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim frm As Forms
    If frm..AllowEdits = False then
    .......'Ce que tu veux
    Regarde dans l'aide d'Access sur la Propriété AllowEdits (par exemple...)
    Tu as un exemple qui pourrais t'aider....

    En espérant te donner une piste...
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Oui bien sûr.
    C'est une façon détournée de répondre à mon souci.

    Rien d'autre ?

  5. #5
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Oui bien sûr.
    C'est une façon détournée de répondre à mon souci.
    As-tu au moins essayé ce qui été proposé

    Fais un test....montre nous ton code.....et on va essayer d'avancer tous ensemble....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Je commence que depuis peu à insérer du code dans mes applications qui à la base sont construites avec des macros.

    J'ouvre donc mes formulaires avec des macros dans les quelles je renseigne l'argument "Mode données" selon une condition qui est variable d'un formulaire à l'autre.

    Par contre j'ai monté un code sous forme de Public Function qui permet de faire apparaître un menu contextuel par un clic droit sur les champs de mes formulaires.
    Dans ce menu contextuel, il y a une commande "Supprimer l'enregistrement" que je souhaiterais présenter désactivée lorsque le formulaire actif (quel qu'il soit) est ouvert en mode données "lecture seule".
    Si le formulaire est en lecture seule on ne peut pas supprimer. Logique.

    Utiliser la propriété AllowEdits dans ma condition m'obligera à revoir mes macros d'ouverture de chacun de mes formulaires pour spécifier la propriété correspondante en fonction de la condition.

    Excuses-moi, mais je n'ai rien vu d'autre dans l'aide sur cette propriété.

  7. #7
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Ok...c'est mieux avec plus d'explications.....

    Exemple : Comment connaitre "l'état" d'un formulaire (Ajout autorisé, Modif autorisé, etc......).
    Sur un simple formulaire, tu crée un bouton de commande (Commande5).
    Sur son événement "Sur clic" tu tape le code VBA suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commande5_Click()
    Dim frm As Forms
    'En fonction de la valeur de AllowAdditions (Ajout autorisé) on affiche tel ou tel boîte de message.
    If Me.Form.AllowAdditions = False Then
        MsgBox "Ajout autorisé = NON"
    Else
        MsgBox "Ajout autorisé = OUI"
    End If
    End Sub
    Voila ceci n'est qu'un principe de base, maintenant il te faut l'adapter à ton application...
    Eventuellement met le code de ta fonction de ton menu contextuel.....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    OK. J'avais compris ça.
    Mais j'ai ouvert mon form avec une macro renseignant l'argument "Mode données".
    Donc je ne peux pas me référer aux propriétés "AllowAdditions" ou "AllowEdits" qui sont court-circuitées par l'argument "Mode données" de ma macro.
    Ou alors je n'ai pas tout compris...

  9. #9
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    c'est pas plus simple comme ça Free?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande5_Click() 
    MsgBox "Mode Ajout = " & me.allowadditions
    End Sub
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  10. #10
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Mais j'ai ouvert mon form avec une macro renseignant l'argument "Mode données".
    OK...alors pas de problème.. ...puisque tu as l'air bien partie pour pratiquer à fond le VBA (bien mieux que les macros..); alors ouvre ton formulaire par une commande du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "NomDeTonFormulaire"
    Ici dans les arguments de la méthode "OpenForm" comme tu ne précise pas acReadOnly (Lecture seule), le formulaire sera ouvert en tenant compte des différentes propriétés que tu auras défini (Ajout..., Modification...etc...) dans la fenêtre des propriétés.
    Ensuite modifie le code de ta fonction "Menu contextuel" en testant "l'état" du formulaire.......
    Eventuellement si problème, tu peux t'orienter vers la création de deux menus contextuels différents qui s'afficheront selon le cas.....
    Cela ne sont que quelques pistes....

    @ Faw
    c'est pas plus simple comme ça Free?
    OUI....... ..mais mon exemple ne faisait que répondre à la question posée (avec condition..If...then...)....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  11. #11
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Citation Envoyé par marcb03
    OK. J'avais compris ça.
    Mais j'ai ouvert mon form avec une macro renseignant l'argument "Mode données".
    Donc je ne peux pas me référer aux propriétés "AllowAdditions" ou "AllowEdits" qui sont court-circuitées par l'argument "Mode données" de ma macro.
    Ou alors je n'ai pas tout compris...
    Cet argument a une valeur numérique, je pense que tu peux le transmettre via une variable à laquelle tu donnes, selon tes conditions, la valeur adaptée (0, 1, -1, 2) cf l'aide.
    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim var as integer
    if condition1 then 
    var = 0
    else ....
     
    end if
     
    DoCmd.OpenForm "monform", , , , var
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Pour Free :
    Ok, mais n'oublie pas que je précise dans la macro ou dans les arguments de la méthode "OpenForm" acReadOnly (Lecture seule).
    Cela ne change pas les propriétés Lecture seule ou Modification de mon formulaire et je ne peux baser mon code la-dessus.

    Pour Faw :
    L'idée de créer une variable en fonction de la condition d'ouverture du formulaire est effectivement intéressante puisque je peux la récupérer par la suite dans mon code d'ouverture du menu contextuel.
    Il va falloir que j'intervienne sur chaque ouverture de formulaire :un peu plus compliqué que si j'avais pu directement récupérer la valeur de l'argument "mode données" du formulaire actif.

    Si personne n'a d'autre idée ...

  13. #13
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    FreeAccess a raison. Voici ce que dit l'Aide d'Access :
    Note : Lorsque l'argument Mode données de l'action OuvrirFormulaire est utilisé, Microsoft Access ignore une série de paramètres de propriété de formulaire. Si la valeur Modification est attribuée à l'argument Mode données de l'action OuvrirFormulaire, Microsoft Access ouvre le formulaire avec les paramètres de propriété suivants :

    ModifAutorisée (AllowEdits) — Oui
    SupprAutorisée (AllowDeletions) — Oui
    AjoutAutorisé (AllowAdditions) — Oui
    EntréeDonnées (DataEntry) — Non

    Pour empêcher l'action OuvrirFormulaire de passer outre ces paramètres de propriété existants, omettez le paramètre de l'argument Mode données pour que Microsoft Access utilise les paramètres de propriété définis par le formulaire.
    En utilisant acReadOnly avec OpenForm , AllowEdits, AllowDeletions, AllowAdditions prennent la valeur False.

    A+

  14. #14
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    En fait marcb03 voudrait récupérer la valeur de l'argument AcFormOpenDataMode de OpenForm du formulaire actif.
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  15. #15
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Alors peut être une autre solution.....
    Ici plus de macros, mais du code VBA, car on va avoir besoin de l'argument Arg de la méthode OpenForm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "MonFormulaire", , , , acFormReadOnly, , "LectureSeule"
    Ensuite, il ne reste plus qu'a tester la valeur de Arg....dans le code du menu contextuel..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select Case OpenArgs
        Case "LectureSeule"
            ............
    Else
           ............
    Sinon, je ne vois pas ce qui empêche de se passer de acReadOnly dans la méthode OpenForm.......

    [EDIT] Code pour le menu contextuel; à placer dans l'événement "Sur souris appuyée" du Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Détail_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = acRightButton Then
       Select Case OpenArgs
          Case "LectureSeule"
            MsgBox "Affichage menu contextuel n° 1"
               'CommandBars("Menu1).ShowPopup
          Case Else
            MsgBox "Affichage menu contextuel n° 2"
              'CommandBars("Menu2").ShowPopup
       End Select
    End If
    End Sub
    Sinon, on peut également se diriger vers la conception d'un menu contextuel dynamique....
    Bon aller, assez cogiter pour ce soir.........
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Ouais ...

    Merci quand même, mais j'ai pensé à une solution plus intéressante qui consiste à verrouiller chaque control à réception du Focus si la première condition est remplie.
    Et puis dans le code de mon menu contextuel dynamique je place une condition du style If Screen.ActiveControl.Locked = False Then ..... pour ne pas activer certaines commandes.

    Merci à tous.

  17. #17
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,
    Merci quand même, mais j'ai pensé à une solution plus intéressante qui consiste à verrouiller chaque control à réception du Focus si la première condition est remplie.
    Je ne comprends plus très bien ce que tu voulais faire ......car au départ tu "insitais" pour que ton form soit en lecture seule (donc non modifiable)....et maintenant tu parle de contrôles verrouillés

    Enfin bref, si tu as réussi ce que tu veux, c'est l'essentiel.....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  18. #18
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Par défaut
    Salut,
    l'idée du openargs était plutôt judicieuse Free.
    Bonne soirée à tous .
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  19. #19
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonsoir,
    @ marcb03

    Aprés quelques essais....je confirme que si tu ouvre un Form avec l'argument "acFormReadOnly" à partir du code ou d'une macro, et bien systématiquement la propriété "Modif autorisée" est toujours à NON (false).
    Donc, tu peux tester dans le code de ton menu contextuel pour le savoir..

    Par exemple:
    -1) crée un form (Formulaire1) avec un simple bouton permettant l'ouverture d'un second Form (Formulaire2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande6_Click()
    DoCmd.OpenForm "Formulaire2", , , , acFormReadOnly
    End Sub
    -2) dans l'événement "Sur ouverture" du Formulaire2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Open(Cancel As Integer)
    'Ici, si Form avec acFormReadOnly, alors la propriété "Modif autorisée" = NON
    If Me.AllowEdits = False Then
        MsgBox "En lecture seule"
    Else
        MsgBox "Modification autorisée"
    End If
    End Sub
    Résultat:
    Ouverture de Formulaire2 à partir Formulaire1 "En lecture seule"

    Simple ouverture de Formulaire2 "Modification autorisée"

    En espérant que cela te permettre de réaliser plus facilement ce que tu voulais obtenir....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/01/2013, 18h45
  2. passer en mode données ou formulaire avec un bouton
    Par marcmarc150 dans le forum IHM
    Réponses: 2
    Dernier message: 09/01/2010, 16h18
  3. Réponses: 1
    Dernier message: 31/08/2009, 05h17
  4. Réponses: 2
    Dernier message: 22/10/2008, 09h44
  5. Réponses: 12
    Dernier message: 21/06/2006, 09h58

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