Bloquer tous les champs à part UN [Résolu]

Signaler
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009
-
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009
-
Bonjour,

Je voudrais verrouiller tous les champs de mon formulaire de consultation sauf UN, une liste déroulante

Pour verrouiller tous les champs, j'entre ce code :

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

Et je voudrais donc pouvoir autoriser l'accès et la saisie d'un champ.
Je pensais donc mettre ce code :

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 = true
Me."mon_champ".Locked = false

Mais ca ne marche pas  

Comment pourrais-je faire

Merci

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -

32 réponses

Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Ben :
Public sub LockAll()
...
end sub

Si tu le met dans un module, n'oublie pas de remplacer "Me" par le nom de la form.
Sinon, tu peux mettre la Sub dans le code de la form sans pb.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Re,

Dans un module :

Private Sub CtrlLook(oFrm As Form)
Dim Ctrl As Control
For Each Ctrl In oFrm .Controls
            Select Case Ctrl .ControlType
                Case acTextBox, acComboBox, acCheckBox
                    Ctrl .Locked = True
            End Select
        Next Ctrl
End Sub
A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Tu as réellement fais
Me."NomChamp".Enabled
ou
Me.NomChamp.Enabled
?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

non non, excusez moi.
la ligne exacte est :

me.ld_recherche.Enabled

/FONT>
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Voilà les deux lignes arpès mon For :

Me.ld_rechercheEnabled = true
Me.ld_recherche.Locked = false

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
14769
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 février 2021
151
Bonjour

Ne marque réponse acceptée que si ton pb est résolu, sinon, ton message sera moins consulté et donc tu auras mon de réponses.

Si tu met Enabled à False, pas besoin de toucher à Locked.

Essaye en virant les appels à Locked.

De plus, ton test peut être simplifié :

For Each Ctl In Me.Controls
    Select Case Ctl.ControlType
         Case acTextBox,acComboBox
            Ctl.Enabled = False
    End Select
Next Ctl

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Bien vue pour la simplification. J'avais même pas fait attention.
J'ai donc modifié mon code comme ceci :

For Each Ctl In Me.Controls
            Select Case Ctl.ControlType
                Case acTextBox, acComboBox
                    Ctl.Enabled = False
            End Select
Next Ctl
Me.ld_recherche.Enabled = True

Lorsque je lance le formulaire, j'ai accès à ma liste déroulante, mais je ne peux pas cliquer dessus pour selectionner la donnée que je souhaite.

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Salut,

Enlève dans se cas je pense : acComboBox

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Re,

En simplifiant :

For Each ctl In Me.Controls
  If TypeOf ctl Is TextBox Then ctl.Enabled = False
Next ctl
Me.ld_recherche.Enabled = True

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Oui j'y avais pensé.
Mais dans mon formulaire, il y a plein d'autres listes déroulantes ...

Si je fais comme tu dit, faut que je bloque toutes les liste une par une.

J'pensais pouvoir tout bloquer puis débloqué seulement les champs que je veux.

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Salut,

Quel est le nom de ton SEUL ConboBox que tu ne veux pas bloquer ?

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Il s'agit de Me.ld_recherche
C'est lui qui me permet de faire une recherche donc faut qu'il soit en état de marche :)

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Re,

J'y pense, débloque le en fin de boucle alors...

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Re,

J'ai fait comme cela :

 For Each Ctl In Me.Controls
            Select Case Ctl.ControlType
                Case acTextBox, acComboBox
                    Ctl.Enabled = False
            End Select
        Next Ctl
        Me.ld_recherche.Enabled = True

J'ai accès à la liste déroulante mais je ne peux pas selectionner

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Re,

Je viens de faire l'essai avec le code que je t'ai donné à (16h28..lol)...sur une form avec 2 textbox et un combo et cela fonctionne, j'ai bien accès à mon combo et sa liste déroulante....

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Re,

Voilà donc le code de 16h28

For Each ctl In Me.Controls
  If TypeOf ctl Is TextBox Then ctl.Enabled = False
Next ctl
Me.ld_recherche.Enabled = True

Seule les textbox sont bloqués ...
il est normal d'accéder au reste, j'me trompe

rocky

- Un con qui marche ira plus loin qu'un intellectuel assis -
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Re,

Un peu d'astuces....d'espièglerie....c'est la vie de Candy ! lol...

For Each ctl In Me.Controls
  If TypeOf ctl Is TextBox Then ctl.Enabled = False
  If TypeOf ctl Is ComboBox Then ctl.Enabled = False
Next ctl
Me.ld_recherche.Enabled = True

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
13
Ou :

For Each ctl In Me.Controls
  If TypeOf ctl Is TextBox Then ctl.Enabled = False  If Not ctl.Name ld_recherche Then ctl.Enabled False
Next ctl

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
218
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
15 novembre 2009
1
Moi pour Locker un Combobox contre la modification, je n'utilise pas le affreux .locked mais je vais directement dans le KeyPress et KeyDown.

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
KeyCode = 0
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
KeyAscii = 0
End Sub

kakenette
Messages postés
55
Date d'inscription
mercredi 1 novembre 2006
Statut
Membre
Dernière intervention
16 avril 2009

Re,

lol oui ca aide parfois


J'ai un sérieux problème dans mon code là.
Voici le code de tout le formulaire (Va faloir de la place  et j'explique après :

Option Compare Database
Option Explicit



Private Sub bt_annuler_Click()
btannuler
End Sub



Private Sub bt_supprimer_Click()
btsupprimer
End Sub



Private Sub bt_valider_Click()
btvalider
End Sub



Private Sub Form_Load()
Call presentation(Me)
End Sub



Private Sub bt_menu_Click()
btmenu
End Sub



Private Sub ld_recherche_AfterUpdate()
    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[code_ce] = " & Str(Nz(Me![ld_recherche], 0))
    Me.Détail.Visible = True
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub



Private Sub Form_Open(Cancel As Integer)
Select Case Openargs
    Case "ce_ajout"
        'on affiche la partie Détail
        Me.Détail.Visible = True
        'On cache les outils recherche
        Me.boite_rectangle.Visible = False
        Me.za_nom.Visible = False
        Me.ld_recherche.Visible = False
        Me.éti_recherche.Visible = False
        'modification impossible
        Me.AllowEdits = False
       
    Case "ce_modif"
        'Boutons
        Me.bt_annuler.Visible = False
        Me.bt_valider.Visible = False
        'Ajout impossible
        Me.AllowAdditions = False
        'on affiche la partie Détail
        Me.Détail.Visible = False
        'les Champs sont accessible
        For Each Ctl In Me.Controls
            Select Case Ctl.ControlType
                Case acTextBox, acComboBox
                    Ctl.Enabled = True
            End Select
        Next Ctl
        Me.za_titre.Caption = "Modification d'un comité d'engagement"
       
    Case "ce_consultation"
        'boutons
        Me.bt_annuler.Visible = False
        Me.bt_valider.Visible = False
        'ajout impossible
        Me.AllowAdditions = False
        'on affiche la partie Détail
        Me.Détail.Visible = False
        ' on bloque les champs que l'on consulte pour empécher la modification
        For Each Ctl In Me.Controls
            Select Case Ctl.ControlType
                Case acTextBox, acComboBox
                    Ctl.Enabled = False
            End Select
        Next Ctl
        Me.ld_recherche.Enabled = True
        'on change le titre
        Me.za_titre.Caption = "Consultation d'un comité d'engagement"
       
    Case "ce_suppr"
        'boutons
        Me.bt_annuler.Visible = False
        Me.bt_valider.Visible = False
        Me.bt_supprimer.Visible = True
        'ajout impossible
        Me.AllowAdditions = False
        'on affiche la partie Détail
        Me.Détail.Visible = False
        ' on bloque les champs que l'on consulte pour empécher la modification
        For Each Ctl In Me.Controls
            Select Case Ctl.ControlType
                Case acTextBox, acComboBox
                    Ctl.Enabled = False
            End Select
        Next Ctl
        Me.ld_recherche.Enabled = True
        'on change le titre
        Me.za_titre.Caption = "Suppression d'un comité d'engagement"
End Select
End Sub


Donc là si mon formulaire s'ouvre un "modification", j'ai accès à la liste ld_recherche.

Si j'ouvre en "consultation", je n'y ai pas accès.

J'ai éssayé de mettre exactement la même boucle FOR que "modification"dans "consultation" et là ...    Ca ne change rien ... j'ai toujours pas accès à la liste déroulante.

C'est grave docteur ?             







rocky




- Un con qui marche ira plus loin qu'un intellectuel assis -