Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sous formulaire en lecture seule

4 réponses
Avatar
dsf34
Bonjour à Tous

Access 2003
J'ai un formulaire principal qui contient 2 zones de liste déroulante
liées. Apres le choix effectuée dans la seconde zone de liste, le sous
formulaire affiche les données correspondantes.
L'accès à ce formulaire s'effectue après avoir saisi un nom d'utilisateur et
un mot de passe dans un formulaire parent.
En fonction de l'identifiant de l'utilisateur, je souhaite que le sous
formulaire puisse être en lecture seule ou pas.
En VBA, j'essaye de mettre la propriété "Type de Recordet" du sous
formulaire à "Instantané" selon l'identifiant de l'utilisateur.
Cependant, je n'y arrive pas. Je pense que je dois faire une erreur de
syntaxe, ou bien je n'écris pas la commande au bon moment...
Si quelqu'un peut m'aider sur ce coup !

Merci
Amicalement
Didier

4 réponses

Avatar
jero
Salut,
Vas voir du côté de AllowEdits.
Ex :
If IdUtilisateur="123" then
Forms!MachinTruc.AllowEdits=True
else
Forms!MachinTruc.AllowEditsúlse
EndIf
Autre :
If IdUtilisateur="123" then
docmd.Openform "MachinTruc",,,,acFormEdit
else
docmd.Openform "MachinTruc",,,,acFormReadOnly
endif
A+

"dsf34" a écrit dans le message de news:

Bonjour à Tous

Access 2003
J'ai un formulaire principal qui contient 2 zones de liste déroulante
liées. Apres le choix effectuée dans la seconde zone de liste, le sous
formulaire affiche les données correspondantes.
L'accès à ce formulaire s'effectue après avoir saisi un nom d'utilisateur
et
un mot de passe dans un formulaire parent.
En fonction de l'identifiant de l'utilisateur, je souhaite que le sous
formulaire puisse être en lecture seule ou pas.
En VBA, j'essaye de mettre la propriété "Type de Recordet" du sous
formulaire à "Instantané" selon l'identifiant de l'utilisateur.
Cependant, je n'y arrive pas. Je pense que je dois faire une erreur de
syntaxe, ou bien je n'écris pas la commande au bon moment...
Si quelqu'un peut m'aider sur ce coup !

Merci
Amicalement
Didier
Avatar
dsf34
Bonjour Jero,

Merci pour cette solution. Malheureusement, cela ne fonctionne pas comme je
le souhaite. Le fait de mettre le formulaire en lecture seule, m'interdit
l'utilisation des listes déroulantes, et donc le contenu du sous formulaire
ne s'affiche pas.
Il faut donc que le formulaire soit en mode normal, et le sous formulaire en
lecture seule, selon le code d'accès saisi par l'utilisateur !
C'est pour cela que j'essaie d'utiliser la propriété "Type de Recordset" en
mode instantané.
As tu une autre piste à me proposer ?
voila ce que j'écris actuellement
-----------------------------
DoCmd.OpenForm ("F_Planning")
Forms![F_Planning]!SF_Planning.SourceObject = "SF_Planning"
Forms![F_Planning]![SF_Planning].Form.RecordSource = "R_Planning"
Forms![F_Planning]![SF_Planning].Form.RecordsetType = 2
------------------------------

Merci à tous
amicalement
Didier

"jero" wrote:

Salut,
Vas voir du côté de AllowEdits.
Ex :
If IdUtilisateur="123" then
Forms!MachinTruc.AllowEdits=True
else
Forms!MachinTruc.AllowEditsúlse
EndIf
Autre :
If IdUtilisateur="123" then
docmd.Openform "MachinTruc",,,,acFormEdit
else
docmd.Openform "MachinTruc",,,,acFormReadOnly
endif
A+

"dsf34" a écrit dans le message de news:

> Bonjour à Tous
>
> Access 2003
> J'ai un formulaire principal qui contient 2 zones de liste déroulante
> liées. Apres le choix effectuée dans la seconde zone de liste, le sous
> formulaire affiche les données correspondantes.
> L'accès à ce formulaire s'effectue après avoir saisi un nom d'utilisateur
> et
> un mot de passe dans un formulaire parent.
> En fonction de l'identifiant de l'utilisateur, je souhaite que le sous
> formulaire puisse être en lecture seule ou pas.
> En VBA, j'essaye de mettre la propriété "Type de Recordet" du sous
> formulaire à "Instantané" selon l'identifiant de l'utilisateur.
> Cependant, je n'y arrive pas. Je pense que je dois faire une erreur de
> syntaxe, ou bien je n'écris pas la commande au bon moment...
> Si quelqu'un peut m'aider sur ce coup !
>
> Merci
> Amicalement
> Didier


.

Avatar
jero
Salut,
Un exemple avec une liste déroulante (mon form. est en lecture seule - pour
certains utilisateurs)
Private Sub lstRechercheVille_AfterUpdate()
'événement "Après mise à jour"
DoCmd.GoToControl "tIdVille"
DoCmd.FindRecord lstRechercheVille, acEntire, False, , False, acCurrent,
True
End Sub

Private Sub lstRechercheVille_Enter()
'événement "Entrée"
Me.AllowEdits = True
End Sub

Private Sub lstRechercheVille_Exit(Cancel As Integer)
'événement "Sortie"
Me.AllowEdits = False
End Sub
Dans la mesure où l'ordre des événements est : Enter => AfterUpdate => Exit,
il n'y a pas de pb.
On peut probablement (même certainement) procéder autrement, mais j'utilise
cette méthode depuis... la nuit des temps ;>) et ça marche...
A+
"dsf34" a écrit dans le message de news:

Bonjour Jero,

Merci pour cette solution. Malheureusement, cela ne fonctionne pas comme
je
le souhaite. Le fait de mettre le formulaire en lecture seule, m'interdit
l'utilisation des listes déroulantes, et donc le contenu du sous
formulaire
ne s'affiche pas.
Il faut donc que le formulaire soit en mode normal, et le sous formulaire
en
lecture seule, selon le code d'accès saisi par l'utilisateur !
C'est pour cela que j'essaie d'utiliser la propriété "Type de Recordset"
en
mode instantané.
As tu une autre piste à me proposer ?
voila ce que j'écris actuellement
-----------------------------
DoCmd.OpenForm ("F_Planning")
Forms![F_Planning]!SF_Planning.SourceObject = "SF_Planning"
Forms![F_Planning]![SF_Planning].Form.RecordSource = "R_Planning"
Forms![F_Planning]![SF_Planning].Form.RecordsetType = 2
------------------------------

Merci à tous
amicalement
Didier

"jero" wrote:

Salut,
Vas voir du côté de AllowEdits.
Ex :
If IdUtilisateur="123" then
Forms!MachinTruc.AllowEdits=True
else
Forms!MachinTruc.AllowEditsúlse
EndIf
Autre :
If IdUtilisateur="123" then
docmd.Openform "MachinTruc",,,,acFormEdit
else
docmd.Openform "MachinTruc",,,,acFormReadOnly
endif
A+

"dsf34" a écrit dans le message de
news:

> Bonjour à Tous
>
> Access 2003
> J'ai un formulaire principal qui contient 2 zones de liste déroulante
> liées. Apres le choix effectuée dans la seconde zone de liste, le sous
> formulaire affiche les données correspondantes.
> L'accès à ce formulaire s'effectue après avoir saisi un nom
> d'utilisateur
> et
> un mot de passe dans un formulaire parent.
> En fonction de l'identifiant de l'utilisateur, je souhaite que le sous
> formulaire puisse être en lecture seule ou pas.
> En VBA, j'essaye de mettre la propriété "Type de Recordet" du sous
> formulaire à "Instantané" selon l'identifiant de l'utilisateur.
> Cependant, je n'y arrive pas. Je pense que je dois faire une erreur de
> syntaxe, ou bien je n'écris pas la commande au bon moment...
> Si quelqu'un peut m'aider sur ce coup !
>
> Merci
> Amicalement
> Didier


.

Avatar
dsf34
Bonjour Jero,

J'ai testé ta solution, et ça marche très bien comme ça !

Merci beaucoup
A+
Didier

"jero" wrote:

Salut,
Un exemple avec une liste déroulante (mon form. est en lecture seule - pour
certains utilisateurs)
Private Sub lstRechercheVille_AfterUpdate()
'événement "Après mise à jour"
DoCmd.GoToControl "tIdVille"
DoCmd.FindRecord lstRechercheVille, acEntire, False, , False, acCurrent,
True
End Sub

Private Sub lstRechercheVille_Enter()
'événement "Entrée"
Me.AllowEdits = True
End Sub

Private Sub lstRechercheVille_Exit(Cancel As Integer)
'événement "Sortie"
Me.AllowEdits = False
End Sub
Dans la mesure où l'ordre des événements est : Enter => AfterUpdate => Exit,
il n'y a pas de pb.
On peut probablement (même certainement) procéder autrement, mais j'utilise
cette méthode depuis... la nuit des temps ;>) et ça marche...
A+