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 :

controles verrouilles et desactives dans un form


Sujet :

IHM

  1. #1
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut controles verrouilles et desactives dans un form
    bonsoir,
    j'utilise des forms communs à l'entree de donnees et à la consultation.
    sur le bouton de consultation j'ai rajoute le critere ReadOnly :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Commande60_Click()
    Dim stDocName As String
    stDocName = Me.TypeForm.Column(1)
    DoCmd.OpenForm stDocName, acNormal, , , acFormReadOnly
    Est-il possible de rendre l'ensemble des controles verrouillés et désactivés avec un Each controls quelque chose... enabled = false et locked = true ?
    J'ai deja vu ce each controls quelque part mais je ne le retrouve pas
    Sauve qui pneus...

  2. #2
    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
    rendre l'ensemble des controles verrouillés et désactivés avec un Each controls quelque chose...
    Une solution, par exemple pour verrouiller des contrôles texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Ctl As Control
       For Each Ctl In Me.Controls
          If Ctl.ControlType = acTextBox Then
             Ctl.Locked = True
             Ctl.Enabled = False
          End If
       Next Ctl
    Ici il faut te servir du paramètre acTextBox (ControlType) pour déterminer le type de contrôle sur lequel agir.

    Sinon, directement dans l'aide d'Access tu as un exemple parfait pour définir l'état de n'importe quels contrôles présents sur ton formulaire.
    Bonne lecture.

  3. #3
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    Salut Free,
    tout d'abord je te remercie pour ta reponse.
    Ensuite j'ai commence a bosser sur ton script... j'ai cherche avec F1 sur ControlType.... j'ai donc rajoute des ElseIf sur ComboBox et CommandButton qui fonctionnent.
    Par contre je n'ai pas trouve de reference pour les champs date ou les champs numeriques, qui eux restent "accessibles" et donc manifestement ne sont pas consideres commes des champs textes.
    Ca t'inspire quelque chose ?
    Patrick

  4. #4
    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,
    je n'ai pas trouve de reference pour les champs date ou les champs numeriques, qui eux restent "accessibles" et donc manifestement ne sont pas consideres commes des champs textes.
    Pas tout compris

    Texte, Numérique, date correspond à un type de donnée, qui sera saisie à partir du formulaire dans des contrôles de type Zone de texte.
    Donc si tu verrouille et désactive l'ensemble des contrôles de type texte (acTextBox), tous les contrôles quelque soit le type de données seront concernés
    Ou alors quelque chose m'a échappé

  5. #5
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    re...
    Excuses il s'agit d'une meprise de ma part j'ai parle trop vite ça marche au poil !
    Cependant mes forms de consultation, ne sont au depart que des form standards qui me servent egalement à entrer des donnees. Ils ne deviennent de "consultation" que lorsque ce script intervient.
    Je ne peux donc pas le placer sur le load du form des le depart sinon en temps normal je ne pourrais plus entrer de données.
    Alors est-ce qu'il faut le placer sur une condition d'ouverture du style " si CurrentForm ouvert par bouton1 sur formA alors...."
    ou bien le rajouter dans la commande click du bouton qui ouvre ce form de consultation.
    Excuses si je fais de la prose mais j'essai dêtre comprehensible

  6. #6
    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
    D'un coup tu m'a donné très chaud.....j'ai du relire au moins trois fois ce que tu me demandé
    Alors est-ce qu'il faut le placer sur une condition d'ouverture du style " si CurrentForm ouvert par bouton1 sur formA alors...."
    ou bien le rajouter dans la commande click du bouton qui ouvre ce form de consultation.
    La deuxième solution est la plus simple, car je pense que tu pars d'un form type menu qui permet d'accéder à ton form soit en modification ou en visualisation.
    Ceci dit tu peux également opter pour un Formulaire unique:
    1- à l'ouverture il est uniquement en visualisation (tous les champs verrouillés)

    2- à l'aide d'un bouton contenue sur ton form, tu passe en modification:
    - deverrouillage de tous les champs
    - tu cache ton contrôle MODIFICATION
    - tu rend visible un contrôle VALIDER (qui permettra la sortie et le retour en visualisation)

    Bien sur, ce ne sont que des idées

    [EDIT] Question: Si tu ouvre tes formulaires avec l'argument acFormReadOnly, dans ce cas l'utilisateur ne peut rien modifier donc pourquoi vouloir en plus verrouiller tes champs

  7. #7
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    salut Free,
    Question: Si tu ouvre tes formulaires avec l'argument acFormReadOnly, dans ce cas l'utilisateur ne peut rien modifier,
    donc pourquoi vouloir en plus verrouiller tes champs
    simplement pour eviter d'avoir le focus sur les controles... pour le cote visuel because les utilisateurs sont du genre pinailleurs ... comment est-ce possible ?
    la solution que tu evoques est effectivement plus simple :
    le form de base en ReadOnly avec un bouton Modif le mettant en AllowEdit (dans ce cas j'ai prevu une autorisation avec password, pour que je sache qui fait quoi...)
    J'ai testé, c'est OK.
    pour entrer un nouvel enrgistrement je l'ouvre en AllowAdd. et c'est Ok egalement.
    Donc mon seul bleme reste, que j'aimerais supprimer le focus sur les champs et sutout sur un bouton (ouverture d'un controle calendrier), qui lui, permet de modifier un controle date meme en ReadOnly.

  8. #8
    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,
    Donc mon seul bleme reste, que j'aimerais supprimer le focus sur les champs et sutout sur un bouton (ouverture d'un controle calendrier), qui lui, permet de modifier un controle date meme en ReadOnly.
    Une idée, vite fait
    On va se servir de l'argument OpenArgs de OpenForm:

    Sur un premier form, tu as deux contrôles bouton de commande (Visualisation et Modification). Sur événement 'Sur clic' de chaque contrôle, tu tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Code bouton visualisation
    Private Sub Commande0_Click()
    DoCmd.OpenForm "form1", acNormal, , , , , "Visualisation"
    End Sub
    
    'Code bouton modification
    Private Sub Commande1_Click()
    DoCmd.OpenForm "form1", acNormal, , , , , "Modification"
    End Sub
    Ensuite sur le form qui te sers à Visualiser et/ou Modifier, tu tape sur événement 'Sur ouverture':
    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
    Private Sub Form_Open(Cancel As Integer)
    Dim Ctl As Control
    
    Select Case OpenArgs
        Case "Visualisation"
            For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            End If
       Next Ctl
    'Ici on cache le contrôle calendrier   
    Me.cmdCalendrier.Visible = False
    
       Case "Modification"
            For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = False
            Ctl.Enabled = True
            End If
       Next Ctl
    'Ici on affiche le contrôle calendrier
    Me.cmdCalendrier.Visible= True
    
    End Select
    End Sub
    Voila, comme cela en fonction de la valeur de OpenArgs, tu peux mettre le code que tu veux Bien sur tu adapte à ton application.
    Bonne continuation.

  9. #9
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    Eh bien je ne savais pas à quoi servait ce OpenArgs.... maintenant j'en ai une idée !
    Je vais tester ça ! je te tiendrais au courant sans faute. merci à toi.
    Patrick

  10. #10
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    Bonsoir Free,
    voici le code du form de "filtrage"
    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 Commande53_Click()
    Dim stDocName As String
    stDocName = Me.TypeForm.Column(1)
    DoCmd.OpenForm stDocName, acNormal, , , acFormAdd, , "Ajout"
    End Sub
    Private Sub Commande60_Click()
    Dim stDocName As String
    stDocName = Me.TypeForm.Column(1)
    DoCmd.OpenForm stDocName, acNormal, , , acFormReadOnly, , "Consultation"
      Dim Ctl As Control
    End Sub
    Private Sub Commande70_Click()
    Dim stDocName As String
    stDocName = Me.TypeForm.Column(1)
    DoCmd.OpenForm stDocName, acNormal, , , acFormEdit, , "Modification"
      Dim Ctl As Control
    End Sub
    et voici le code du form "cible"
    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
     
    Private Sub Form_Open(Cancel As Integer)
    Dim Ctl As Control
    Select Case OpenArgs
        Case "Consultation"
            For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
           ElseIf Ctl.ControlType = acComboBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            End If
       Next Ctl
    Me.Commande112.Visible = False
    Me.Commande114.Visible = False
    '=======================================
       Case "Modification"
            For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = False
            Ctl.Enabled = True
    ElseIf Ctl.ControlType = acComboBox Then
            Ctl.Locked = False
            Ctl.Enabled = True
            End If
       Next Ctl
    Me.Commande112.Visible = True
    Me.Commande114.Visible = True
    '=======================================
       Case "Ajout"
            For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = False
            Ctl.Enabled = True
            ElseIf Ctl.ControlType = acComboBox Then
            Ctl.Locked = False
            Ctl.Enabled = True
            End If
       Next Ctl
    Me.Commande112.Visible = True
    Me.Commande114.Visible = True
    End Select
    End Sub
    Me voici donc avec une belle perspective de travail, je n'ai plus qu'à standardiser quelques noms de controles, et je peux utiliser ce script de façon "générique".
    Je ne sais vraiment comment te remercier, car pour une
    idée vite fait
    , c'est sacrement bien vu ! Alors merci tout simplement...
    Patrick

  11. #11
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    bonjour,

    une fois que j'ai rentré ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            ElseIf Ctl.ControlType = acComboBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            End If
            Next Ctl
    Je ne peux plus accéder à la saisie et à la modification du champ dans un formulaire.
    Normale me dirais vous !

    Mais bon je suis chiant
    Je voudrais avoir accéder tout de même à un seul champ, plus précisement une liste déroulante.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each Ctl In Me.Controls
            If Ctl.ControlType = acTextBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            ElseIf Ctl.ControlType = acComboBox Then
            Ctl.Locked = True
            Ctl.Enabled = False
            End If
            Next Ctl
            Me."mon_champ".Enabled = False
            Me."mon_champ".Locked = false
    Mais cela ne marche pas.

    Comment dois-je le renseigner dans ce code ?

    Merci

  12. #12
    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,

    ....Evite de continuer une discution sur un post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me."mon_champ".Enabled = False
    Me."mon_champ".Locked = false
    Mais cela ne marche pas.
    ..il faut un minimum réfléchir au code que l'on tape....
    ....regarde à quoi corespond les propriétés "Locked" et "Enabled"....et je suis certain que tu trouveras ton erreur tout seul

  13. #13
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    ....Evite de continuer une discution sur un post
    oui mais si j'ouvre un autre sujet, on me dit de rechercher et qu'il y a des sujets qui en parlent...


    je sais que c'était idiot de mettre ca, mais ce que je voulais dire, c'est que locked et enabled soit à true ou false ne change rien.
    Cela ne marche pas non plus ...

    en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me."mon_champ".Locked = False
    Me."mon_champ".Enabled = True
    je croyais que cela devait marcher mais non

  14. #14
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut
    Pourrait-on me dire si c'est possible ou pas ?
    j'ai beau chercher, je ne trouve pas ...

  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
    Re....

    Maintenant, si la propriété "Locked" ou "Enabled" ne fonctionne pas....c'est souvent parce que tu ne l'applique pas sur le bon contrôle.......
    Eventuellement, vérifie que le nom du contrôle correspond bien au non de ta Zone de liste déroulante et non pas à son étiquette......

    De plus.......
    je croyais que cela devait marcher mais non
    ......il faut préciser ce qui ne fonctionne pas.....(message erreur, blocage, comportement particulier du contrôle...)

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/09/2008, 13h30
  2. [VB.net] controler Excel dans une Form ?
    Par sergio_bzh dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/06/2006, 14h08
  3. controle de navigation dans un form
    Par nowick dans le forum Access
    Réponses: 3
    Dernier message: 28/05/2006, 18h41
  4. [VB.NET] extraire tt les controls prensents dans une form.
    Par Splash dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/12/2005, 19h12
  5. VB - Génération dynamique de controles dans un forme
    Par jeanangel dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/12/2005, 21h09

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