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 :

Interdire modification champ Utilisteur()


Sujet :

IHM

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut Interdire modification champ Utilisteur()
    Bonjour,

    J'ai un gros problème avec un champ texte qui me permet d'avoir l'username des utilisateurs grâce au code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
    Dim Username
        Me.Employee.Value = Environ("UserName")
    End Sub
    Le problème, c'est que lorsque un utilisateur reclick sur un des champ de l'enregsitrement en cours, le matricule se change et devient le sien au lieu de celui qui avait été mis à la base ...

    J'ai joué avec la propriété Locked mais rien à faire ...

    Aidez-moi svp !!! Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    il te suffit de tester si le matricule est déjà rempli ou non. S'il est vide, tu mets la valeur récupérée, sinon tu laisse la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Form_Current()
        if isnull(me.employee.value) or me.employee.value = "" then
             Me.Employee.Value = Environ("UserName")
       end if
    End Sub
    La propriété locked empêche uniquement l'utilisateur de modifier le champ, cela n'empêche pas le code d'y écrire ce que tu lui as dit.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    il te suffit de tester si le matricule est déjà rempli ou non. S'il est vide, tu mets la valeur récupérée, sinon tu laisse la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Form_Current()
        if isnull(me.employee.value) or me.employee.value = "" then
             Me.Employee.Value = Environ("UserName")
       end if
    End Sub
    La propriété locked empêche uniquement l'utilisateur de modifier le champ, cela n'empêche pas le code d'y écrire ce que tu lui as dit.
    super merci énormément !!!

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Dernier problème (que je n'avais pas avant vu que j'utilisais pour ce champ une zone de liste déroulante et que je fonctionnais par des listes liées pour avoir des valeurs dans un autre champ).

    J'ai un champ "Tache" dans la même table et j'aimerais que selon l'utilisateur, il me donne une valeur.
    En fait, c'est une base de données pour 2 services et il existe 2 tâches distinctes :

    J'ai bien essayé ceci mais ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Tache_GotFocus()
        If Me.Employee.Value = "TM14LD" Then
            Me.Tache.Value = "Cancellation"
    End Sub

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Lorsque je passe par une zone de liste déroulante dont la source est une requête, j'y arrive.
    Le problème c'est qu'il y a une seule valeur dans cette zone de liste déroulante et je dois la séléctionner.

    Je voudrais passer par vba pour mettre automatiquement la valeur dans ce champ ; ca doit etre qqch dans ce genre mais je ne sais même pas ou le mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Me.Employee.Value = "TM14LD" Then
    Me.Tache.Value = "Cancellation"
    aidez moi svp

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    C'est peut-être bête mais est-ce que le fait que ça ne marche ne vient pas du fait qu'il manque le "End IF" ? Ou alors c'est juste une erreur de retranscription...

    S'il n'y a qu'une seule valeur dans ta zone de liste déroulante et que tu veux la sélectionner, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        If Me.Tache.ListCount = 1 Then
            Me.Tache.Value = Me.Tache.ItemData(0)
        End If

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    C'est peut-être bête mais est-ce que le fait que ça ne marche ne vient pas du fait qu'il manque le "End IF" ? Ou alors c'est juste une erreur de retranscription...

    S'il n'y a qu'une seule valeur dans ta zone de liste déroulante et que tu veux la sélectionner, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        If Me.Tache.ListCount = 1 Then
            Me.Tache.Value = Me.Tache.ItemData(0)
        End If
    Non en fait, mon champ Take est une zone de texte (j'ai dit que j'arrivais à la faire avec une zone de liste déroulante donc la source est une requête mais que je devais clicker sur la zone de liste déroulante pour séléctionner l'unique valeur).

    Mais j'ai envie que le champ Take soit une zone de texte et que si mon champ Employee = valeur mon champ Take prenne une valeur ; un truc dans le style (ces 2 champs font partie de la même table) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Employee_AfterUpdate()
    If Me![Employee] = "TM14LD" Or "BL54XR" Then
    Me![Take] = Cancellation
    Else
    Me![Take] = Inforcement
    End If
    End Sub

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    je crois qu'il faut que tu reprécise OR me.employee = "BL54XR"
    Et quand tu veux faire référence à tes contrôles, utilise plutôt me. au lieu de me! N'hésite pas à utiliser l'écriture intuitive (quand tu tapes me. une liste s'affche avec la liste de tous les contrôles et propriétés de ton formulaire). C'est très pratique pour ne pas faire d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Employee_AfterUpdate()
    If Me.Employee = "TM14LD" Or Me.Employee="BL54XR" Then
    Me.Take = "Cancellation"
    Else
    Me.Take = "Inforcement"
    End If
    End Sub

  9. #9
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    je crois qu'il faut que tu reprécise OR me.employee = "BL54XR"
    Et quand tu veux faire référence à tes contrôles, utilise plutôt me. au lieu de me! N'hésite pas à utiliser l'écriture intuitive (quand tu tapes me. une liste s'affche avec la liste de tous les contrôles et propriétés de ton formulaire). C'est très pratique pour ne pas faire d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Employee_AfterUpdate()
    If Me.Employee = "TM14LD" Or Me.Employee="BL54XR" Then
    Me.Take = "Cancellation"
    Else
    Me.Take = "Inforcement"
    End If
    End Sub
    Cela ne marche pas ; je ne sais pas si c'est important mais mon champ "Employee" contient l'utilisateur Windows et ce champ est concerné par les 2 codes suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Current()
        If IsNull(Me.Employee.Value) Or Me.Employee.Value = "" Then
             Me.Employee.Value = Environ("UserName")
       End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Utilisateur()
    Utilisateur = Environ("UserName")
    End Function

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Si ton champ utilisateur est rempli par le code précédent, la procédure évènementielle afterUpdate n'est pas appelée. Elle n'est appelé que quand c'est l'utilisateur qui met à jour le champ utilisateur.

    Il te faut donc :
    - soit t'es sûre que jamais l'utilisateur ne touche au champ Utilisateur auquel cas tu met le code que tu as dans afterUpdate directement dans ton code précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_Current()
        If IsNull(Me.Employee.Value) Or Me.Employee.Value = "" Then
             Me.Employee.Value = Environ("UserName")
             If Me.Employee = "TM14LD" Or Me.Employee="BL54XR" Then
                  Me.Take = "Cancellation"
             Else
                  Me.Take = "Inforcement"
             End If
       End If
    End Sub
    - soit l'utilisateur risque de pouvoir modifier le champ utilisateur auquel cas, tu créé une procédure indépendante du style "UpdateTakeAccordingUser" et tu appelles cette méthode à la fois dans _AfterUpdate et dans Form_Current
    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
    private sub UpdateTakeAccordingUser()
         If Me.Employee = "TM14LD" Or Me.Employee="BL54XR" Then
             Me.Take = "Cancellation"
         Else
             Me.Take = "Inforcement"
         End If
    End sub
     
    Private Sub Form_Current()
        If IsNull(Me.Employee.Value) Or Me.Employee.Value = "" Then
             Me.Employee.Value = Environ("UserName")
             UpdateTakeAccordingUser
       End If
    End Sub
     
    Private Sub Employee_AfterUpdate()
         UpdateTakeAccordingUser
    End Sub

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Super !!!!!!! Merci énormément

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Dernier souci ; pour mon champ Utilisateur ; j'ai un problème avec mon état sur l'évènement Report_NoData ; à cause de ce champ il ne me bloque pas l'impression de mon état. Y aurait-il un moyen de bloquer l'impression en ne tenant pas compte de ce champ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Report_NoData(Cancel As Integer)
      MsgBox "There are no records for report Inforcement cancellation", vbExclamation, "CTX"
      Cancel = True
    End Sub

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    Comment ça "à cause de ce champ". Quelle est la source de donnée de ton état ?
    Si tu ouvre ton état depuis le formulaire avec lequel tu as eu les problèmes précédents, tu peux faire un test sur un clic de ton bouton et si OK tu ouvre ton état, sinon tu affiche le message que tu as mis dans _NoData.

    Sinon tu peux aussi utiliser la procédure évènementielle _Open dans laquelle tu fais le test qu'il faut et dans laquelle tu peux aussi mettre Cancel=True pour annuler l'affichage de l'état.

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par Taoueret Voir le message
    Comment ça "à cause de ce champ". Quelle est la source de donnée de ton état ?
    Si tu ouvre ton état depuis le formulaire avec lequel tu as eu les problèmes précédents, tu peux faire un test sur un clic de ton bouton et si OK tu ouvre ton état, sinon tu affiche le message que tu as mis dans _NoData.

    Sinon tu peux aussi utiliser la procédure évènementielle _Open dans laquelle tu fais le test qu'il faut et dans laquelle tu peux aussi mettre Cancel=True pour annuler l'affichage de l'état.
    Je me suis mal exprimé.
    Dans les sous-formulaires qui contiennent ce champ "Employee", apparaît un enregistrement dans chaque sous-formulaire vide avec le champ "Employee" remplit.
    Donc l'état considère même si je n'ai rien remplit dans un sous-formulaire, et bien que l'état n'est pas "vide".

    Tu as compris ?

  15. #15
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Il y aurait-il moyen de renseigner dans l'évènement report_NoData que si un champ n'est pas renseigné (je pense au champ qui lie mon form à mon subform) , il considère qu'il n'y a pas de data ?

  16. #16
    Débutant
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 482
    Points : 142
    Points
    142
    Par défaut
    Bonjour,

    Avec ce champ Username lorsque je clicke sur le bouton suivant de mon formulaire, il me rajoute un enregistrement et si l'utilisateur reste clicker sur le bouton de déplacement suivant pendant 5 secondes, j'ai une centaine d'enregistrement crée avec le champ Username rempli ...

Discussions similaires

  1. Détection modification champs de formulaire
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2007, 12h08
  2. [FB1.5] Interdire modification enregistrement
    Par Mister Nono dans le forum SQL
    Réponses: 12
    Dernier message: 14/09/2007, 15h20
  3. Avertissement apres modification champ formulaire
    Par patos17 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 25/05/2007, 14h02
  4. modification champs d'un query
    Par Mihalis dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/01/2007, 17h07
  5. modification champs BDD
    Par jeff06_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/06/2004, 20h10

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