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

VBA Access Discussion :

Comment interdire la mise à jour d'un champ de formulaire sous condition ?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut Comment interdire la mise à jour d'un champ de formulaire sous condition ?
    Bonjour à tous.
    Le pauvre débutant que je suis bute sur le problème suivant:

    J'ouvre, en mode modification, un formulaire access qui comporte un sous-formulaire (en mode tabulaire) dont les enregistrements sont composés de plusieurs champs "texte".

    Dans ce formulaire, je voudrais interdire à l'utilisateur de modifier n'importe quel champ de l'enregistrement dés lors que le champ "OS" de l'enregistrement en question a déjà été renseigné (lors de saisies antérieures).

    Dans le cas contraire (c.a.d. si OS est Null), l'utilisateur pourra modifier n'importe quel champ de l'enregistrement.

    Je ne sais pas si c'est clairement exprimé, mais je vous remercie d'avance pour toute suggestion.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    l'endroit idéal pour exprimer toutes tes intentions est l'événement "sur activation" de ton formulaire.
    Reviens si tu as des difficultés avec le code.

  3. #3
    Membre Expert Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Par défaut
    bonjour
    essai comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_Current()
    If IsNull(Me.OS) Then
    Me.AllowEdits = True
    Else
    Me.AllowEdits = False
    End If
    End Sub

  4. #4
    jojo5650
    Invité(e)
    Par défaut
    vas dans les propriétés du ou des champs textes concerné
    traite l'évnement beforeupdate (avant maj en francais) dans la procédure évenementielle introduit ce code en adpatant les noms avec ceux de ton formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Texte0_BeforeUpdate(Cancel As Integer)
    if me.os = "ce que tu cherche" then
       msgbox "demande refusée"
       cancel = true
    end if
    End Sub
    jojo5650

  5. #5
    jojo5650
    Invité(e)
    Par défaut
    La methode de "renardo" agit sur la totalité des champs du record ce sera tous ou aucun , et plus aucun dès l'instant ou la condition de verouillage est active
    La méthode agit avant d'enregistrer le contenu d'un champs texte.
    On pourrais aussi renvoyer vers un autre champs si os est remplis.

    l'avantage aussi de la méthode de renardo c'est qu'une fois qu'os est rempli le record sera verouillé pour le formulaire.
    jojo5650

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    Merci à la Communauté de s’être penchée sur mon problème … qui reste malheureusement entier !

    J’ai testé la suggestion de Jojo5650.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Texte0_BeforeUpdate(Cancel As Integer)
    if me.os <> "" then
       msgbox "modification interdite"
       cancel = true
    end if
    End Sub
    Problème: lorsque je tente une modification du champ « libellé » par exemple, ( j’en efface une partie du contenu, chose qui ne devrait pas être acceptée dans le cas où le champ "OS" est rempli), cette modification s’inscrit tout de même dans le champ "libellé".
    Ce n’est que lorsque je clique sur un autre champ que la Msgbox apparaît… mais il n’y a plus alors aucun moyen ni de la faire disparaître ni de rétablir le contenu initial du champ.
    Seule possibilité: fermer access (qui me confirme alors que l'enregistrement n'a pas été effectué)

    Pour ce qui concerne la solution de Renardo, j'avoue mon incompétence : j'ai du mal à comprendre à quel évènement du formulaire rattacher "private Sub Form Current()".
    J'ai testé avec divers évènements (sur activation, après modif de données... )
    mais aucun ne fonctionne (ce dont je me doutais avant même de lancer l'essai, vu que le code ne mentionne pas "Form Current" mais "Form_BeforeUpdate" ou autre, selon l'évènement testé).

    Ai-je zappé un épisode ?

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut

    je voudrais interdire à l'utilisateur de modifier n'importe quel champ de l'enregistrement dés lors que le champ "OS" de l'enregistrement en question a déjà été renseigné
    Ce n'est pas la même chose que

    j'ai du mal à comprendre à quel évènement du formulaire rattacher "private Sub Form Current()".
    Form Current (version anglaise) = sur activation du formulaire (version française).
    Dans l'événement sur activation tu colles ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(Me.OS) Then
    Me.AllowEdits = True
    Else
    Me.AllowEdits = False
    End If
    entre les 2 lignes que Access a mises d'office :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
     
     
    End Sub
    Les 2 solutions qui te sont proposées sont correctes.

    Celle de Renardo, explicite la mienne, elle vaut pour tous les contrôles.
    Celle de JoJo te permet d'affiner tes restrictions contrôle par contrôle.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    J'avais testé plutôt avec l'évènement "sur entrée" (Private Sub objet_Enter()) en "éjectant" (pas très académique comme expression) vers un contrôle quand os <> Null...
    Mais je dois avouer que ça me paraissait plutôt du "bricolage".

    La solution "sur activation" est beaucoup plus élégante et, surtout, marche impeccablement bien !

    Un grand merci à vous.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 100
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message


    Ce n'est pas la même chose que



    Form Current (version anglaise) = sur activation du formulaire (version française).
    Dans l'événement sur activation tu colles ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(Me.OS) Then
    Me.AllowEdits = True
    Else
    Me.AllowEdits = False
    End If
    entre les 2 lignes que Access a mises d'office :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
     
     
    End Sub
    Les 2 solutions qui te sont proposées sont correctes.

    Celle de Renardo, explicite la mienne, elle vaut pour tous les contrôles.
    Celle de JoJo te permet d'affiner tes restrictions contrôle par contrôle.
    Bonjour,
    J'ai à peu pres le meme probleme.
    Si l'on veut empecher seulement la modification du champs OS apres enregistrement comment faire ?

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    Si tu veux limiter le verrouillage à un seul contrôle de ton formulaire, l’instruction est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CeContrôle.Locked=true

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 100
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Bonjour,

    Si tu veux limiter le verrouillage à un seul contrôle de ton formulaire, l’instruction est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CeContrôle.Locked=true
    Merci pour cette reponse rapide.
    voici ce que j'ai ecrit comme code sur "activation" du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Len(Me.NUM) Is Not Null Then
    Me.NUM.Locked = True
    Else
    Me.NUM.Locked = False
    End If
    le probleme c'est que ca me bloque le champs [NUM] meme si je veux ajouter un enregistrement dans la base.
    Alors que le but est juste d'empecher la modification du champs [NUM] des enrregistrements mais pas d'en ajouter.
    Merci par avance si vous pouvez m'aider

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/04/2010, 18h48
  2. Réponses: 2
    Dernier message: 09/12/2008, 10h21
  3. Réponses: 3
    Dernier message: 08/12/2006, 20h08
  4. Réponses: 4
    Dernier message: 30/05/2006, 20h44
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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