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

Access Discussion :

Verrouiller un champ


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Verrouiller un champ
    Bonjour User,

    J’ai un bug de dernière minute dans le code de Maj EDT :
    Lorsque je souhaite par exemple changer l’indisponibilité d’un Professeur, le système me retourne un message qui est
    « La classe est en cours ou la salle est occupée »
    Ce qui est impossible puisque, aucun cours ne peut être entré dans ce cas précis.
    Le plus gênant c’est que si l’emploi du temps presque terminé il faut reprendre pratiquement l’ensemble.
    L’erreur vient à mon avis, des instructions « If……..Then……….Else…..End If » qui ne sont pas bouclées normalement

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Private Sub CmdValider_Click()
     
     'Valide les choix effectués sur le formulaire "F_SaisieEDT".
     
    On Error GoTo Err_CmdValider
     
    Dim n As Long
    Dim HD As Date, HF As Date
    Dim Classe
     
     
     
     
     
    ' Si les zones de texte "Cours" ou "Memo" ne sont pas vides
     
    If ((Me!Cours <> "") And Not IsNull(Me!Cours)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Or _
     ((Me!Salle <> "") And Not IsNull(Me!Salle)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
    ' Si les zones de texte "Disponibilités" ou "Memo" ne sont pas vides
    Else
     
       If ((Me!IdDisponibilités <> "") And Not IsNull(Me!IdDisponibilités)) Or _
     ((Me!Memo <> "") And Not IsNull(Me!Memo)) Then
       HD = CDate(Me!DateRdV1) + CDate(Me!HoraireD)
       HF = CDate(Me!DateRdV2) + CDate(Me!HoraireF)
     
     End If
     End If
          If (Format(HF, "hh:nn") <= Format(HeureFin, "hh:nn")) And (HD < HF) Then
     
    ' On recherche des RDV dont les horaires de début et de fin chevauchent les
    ' horaires choisis sur le formulaire.
    Classe = Nz(DLookup("NomClasse", "T_Classe", "InStr('" & Nz(Me.Cours, "") & "',[NomClasse]) <> 0"), "")
    n = Nz(DLookup("[NR]", "T_SaisieEDT", "(NR<>" & Nz(Me!NR, 0) & ") And (InStr([Cours],'" & Classe & "')<>0) And HoraireDebut<" & FormatDateUS(HF) & " And HoraireFin>" & FormatDateUS(HD)), 0)
     
    ' si aucun RDV n'a été trouvé, la plage horaire est donc disponible et on peut
    ' enregistrer le RDV.
    Dim db As dao.Database
    Dim rs As dao.Recordset
         If (n = 0) Then
            If ((Me!Cours = "Premiere Maquillage")) Then
     
             Me!Cours = "Premiere_Terminale Maquillage"
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
     
             Set db = CurrentDb
             Set rs = db.OpenRecordset("T_SaisieEDT", dbOpenTable)
     
             rs.AddNew ' ajout d'une entrée correspondant à "Terminale_Premiere Maquillage"
             rs!IdProfesseur = Me.IdProfesseur
             rs!TypeRdv = TypeRdv
             rs!Nom = Nom
             rs!Cours = "Terminale_Premiere Maquillage"
             rs!HoraireDebut = HD
             rs!HoraireFin = HF
             rs.Update
     
             rs.Close
             Set rs = Nothing
     
             db.Close
             Set db = Nothing
     
             MajEDT ' mise à jour du planning
             DoCmd.Close ' fermeture du formulaire de saisie.
     
             Else
     
     
             Me!HoraireDebut = HD
             Me!HoraireFin = HF
             Me.Requery
             MajEDT
             DoCmd.Close
     
     
     
             End If
     
             Else
             MsgBox ("La Classe est déjà en cours, ou la Salle est déjà occupée!")
     
             End If
     
          Else
          MsgBox ("Saisie incorrecte !")
     
          End If
     
     
     
     
    Exit_CmdValider:
        Exit Sub
     
    Err_CmdValider:
        Set goHeader = Nothing
        Set goEDT = Nothing
        MsgBox Err.description
        Resume Exit_CmdValider
     
    End Sub
    Autre solution : Est ’il possible de verrouiller les champs « Cours » et « Salle » (et le code correspondant) du « F_SaisieEDT » lorsque le champ « Disponibités » prend une valeur et vice versa ?
    J’ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Me.Cours.Enabled = True
          Me.Cours.Locked = False
          Me.Salle.Enabled = True
          Me.Salle.Locked = False
    Mais comme d'hab ça ne marche pas

    Merci

    Roland

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Bonjour,

    Le plus simple est d'indenter correctement ton code (il y a un complément qui s'appelle SmartIndenter qui est gratuit et qui fonctionne correctement en 32bits).

    L'erreur apparaitra d'elle-même.

    Inutile de chercher à contourner les erreurs d'algo ou de programmation, il faut les corriger.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Bonjour Loufab et merci de ton conseil.

    Je viens de tester mais il ne s'agit pas d'une erreur de code mais d'un choix à faire qui doit ou non by passer un morceau de code sur un formulaire en fonction de la demande qui est faite.

    En gros si je remplis le champ "Disponibilités" je dois verrouiller le code qui concerne les champs "Cours" et "Salle" et vice versa.

    Merci Roland

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 007
    Points : 24 579
    Points
    24 579
    Par défaut
    Pour mieux comprendre les branchements (if else endif...) il faut d'abord avoir une indentation correcte, surtout sur un si long code et avec autant de branchements.
    Si tu postes un code non indenté, nous allons devoir le faire à ta place. Donc copier le code dans un éditeur, faire l'indentation puis l'analyser. N'est-il pas plus simple que tu installes SmartIndenter et que tu indentes avant de poster ?

    Pour verrouiller (ou non) un ou plusieurs contrôle, suivant la valeur d'un contrôle il faut utiliser les événements :
    Sur Activation
    Après MAj (du contrôle de cette valeur)

    Le code est tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Me.Cours.Enabled = not (me.controle.value="valeur bloquante")
    Me.Cours.Locked = (me.controle.value="valeur bloquante")
    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 112
    Points : 65
    Points
    65
    Par défaut Re
    Merci de ta prompte réponse Loufab, mais j'ai téléchargé avant de te répondre la première fois SmartIdenter sur le site Développez.com et j'ai indenté ce code sur NotePad plus.

    Néanmoins tu m'as, je pense fourni la réponse que j'attendai sur le verrouillage de contrôles. Je ne pourrais malheureusement les tester que demain dans la journée.

    Je te tiens informé.

    Merci

    Roland

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2007, 17h22
  2. [VBA] Verrouiller un champ d'un enregistrement ?
    Par Thibaut83 dans le forum IHM
    Réponses: 4
    Dernier message: 05/04/2007, 13h58
  3. Verrouiller des champs
    Par Destiny dans le forum Access
    Réponses: 12
    Dernier message: 12/02/2007, 13h23
  4. Réponses: 2
    Dernier message: 03/04/2006, 15h10
  5. Verrouiller un champ texte avec condition
    Par uskiki85 dans le forum Access
    Réponses: 5
    Dernier message: 09/09/2005, 18h51

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