OVH Cloud OVH Cloud

Empecher modifications données

15 réponses
Avatar
dadpub
Bonsoir,

Je voudrais que les utilisateurs ne puissent pas modifiés les données sur un
formulaire si une certaine date est passée.
A l'ouverture si la date est pas dépassée on fait ce qu'on veut, si la date
est dépassée on regarde mais on peut pas modifier.
J'ai un peu tout essayé : Dirty - Snapshot - AllowEditions - mais je m'en
sort pas !
Pouvez-vous me donner une piste ?

Merci.

5 réponses

1 2
Avatar
dadpub
Bonjour,

En effet, c'était mon Onglet et ses Pages qui posaient problème !
Reste un truc bizarre : J'ai 5 ou 6 boutons de commande, et un et un seul se
retrouve désactivé, pas les autres !!!
Y'aurait pas comme un bug ?

Merci.

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

si le code marche. Mais tu dois avoir des controls qui n'ont pas de
propriétés ENABLED et LOCKED comme des lignes ou des rectangles.

"dadpub" a écrit :

Salut,

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

> Ouais, tu peux te servir d'une moulinette comme suit :
>
> Dim Ctrl as Access.Control
>
> For Each Ctrl In Form.Controls
> IF Ctrl.ControlType<>AcImage AND Ctrl.ControlType<>AcLabel THEN
> Ctrl.EnabledúLSE
> Ctrl.Locked=TRUE
> END IF
> Next

Marche pas !
J'ai le message "erreur 438"
"propriete ou methode non gere par cet objet"
Merci.







Avatar
Dragan
Bonjour,
première chose
les controls étiquette, Image, Ligne, Rectangle n'ont pas de propriété
ENABLED,LOCKED. Les controls TabControl, Commande n'ont pas de propriété
LOCKED.

La séquence d'événements à l'ouverture du formulaire est :
OPEN LOAD RESIZE CURRENT

Pour que le code marche il est préférable soit de placer le code dans
l'événement
Current (Sur Activation) ou qu'il n' y ait pas d'autre modification de
l'état des controls dans ce même événement.

"dadpub" a écrit :

Bonjour,

En effet, c'était mon Onglet et ses Pages qui posaient problème !
Reste un truc bizarre : J'ai 5 ou 6 boutons de commande, et un et un seul se
retrouve désactivé, pas les autres !!!
Y'aurait pas comme un bug ?

Merci.

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

> si le code marche. Mais tu dois avoir des controls qui n'ont pas de
> propriétés ENABLED et LOCKED comme des lignes ou des rectangles.
>
> "dadpub" a écrit :
>
>> Salut,
>>
>> "Dragan" a écrit dans le message de
>> news:
>>
>> > Ouais, tu peux te servir d'une moulinette comme suit :
>> >
>> > Dim Ctrl as Access.Control
>> >
>> > For Each Ctrl In Form.Controls
>> > IF Ctrl.ControlType<>AcImage AND Ctrl.ControlType<>AcLabel THEN
>> > Ctrl.EnabledúLSE
>> > Ctrl.Locked=TRUE
>> > END IF
>> > Next
>>
>> Marche pas !
>> J'ai le message "erreur 438"
>> "propriete ou methode non gere par cet objet"
>> Merci.
>>
>>
>>





Avatar
michel chambrillon
Re bonjour
Tu dis que le code fait des modifs si tu ne les enregistres pas avant il est
impossible de mettre allowEdits a false tant que elles ne sont pas
sauvegardees ajoute Me.Dirty = False avant d'interdire les modifs
Tu parles aussi de sous form le champ DateAmis est il dans le form principal
ou dans le sous form
Si c'est dans un sous form on le reference par
Me![nomdusous form].form!dateAdmis
Plus
Michel
"dadpub" a écrit dans le message de
news:
Bonsoir,
C'est sympa de m'aider ...
J'étais en train de comprendre ceci, de "maitre Raymond" ! Qu'en penses-tu
?
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thread/2b2983ed9caa7f43/7758a51eb1c0b575?hl=fr&lnk=gst&q=AllowEdits+ne+peut+pas+intervenir+si+dirty+est+%C3%A0+True#7758a51eb1c0b575

Tu me dis de mettre le code sur Activation et pas sur Open.
J'ai essayé ce code quasiment sur tous les evenements sans succés.
A ce stade il faut peut-etre preciser 2 choses :
- J'ai 3 sous-formulaires dans mon formulaire, et je me demande si
l'insuccés viendrait pas de là !
- Sur Activation (tiens, tiens !) le code fait tout un tas de
vérifications et donc de modifications d'enregistrement, le probleme
pourrait venir de là aussi !
Exemple de code :
'-------------------------------
If Sexe.Value = "Male" Then
Menopause.Enabled = False
Else
Menopause.Enabled = True
End If
'--------------------------------
@ +
Merci.

"michel chambrillon" a écrit dans le
message de news:
re Bonjour
L'evenement form_open ne me semble pas etre le bon
Il faut ecrire ton code pour qu'il s'execute a chaque changement
d'enregistrement car si j'ai bien compris dateAdmis est un champ de la
table.Donc a l'evenement form_open il tient compte que du dateAdmis du
premier enr.
Affecte ton code a l'evenement sur activation en VBA form_current
@plus
Michel
"dadpub" a écrit dans le message de
news:O$
Re-salut,
Petite rectification !
Le code ci-dessous marche .... la première fois que j'ouvre le
formulaire.
Mais si je le ferme et re-ouvre sur un autre enregistrement, ben ça
marche plus ! ! !
C'est quoi ?
Merci

'---------code------------------------------
Private Sub Form_Open(Cancel As Integer)

Dim Mydate1 As Date
Dim Mydate2 As Date
Dim NbJour As Integer
Mydate1 = Now
Mydate2 = DateAdmis
NbJour = Mydate1 - Mydate2

If NbJour > 60 Then
Me!Rectangle.BackColor = 255
Me.AllowEdits = False
Else
Me!Rectangle.BackColor = 65408
Me.AllowEdits = True
End If

End Sub
'------fin-code------------------------------













Avatar
dadpub
Bonjour,

Merci de vos précisions.
Maintenant ça fonctionne à peu près comme je le souhaitais.
Mais j'ai toujours pas compris pourquoi un de mes boutons de commande (et un
seul parmi d'autres) reste désactivé !
J'ai résolu le problème en codant une ligne spécialement pour ce bouton :
Me!BoutonFiche.Enabled = True
Juste pour pas mourir idiot, si quelqu'un peut donner une explication.

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

Bonjour,
première chose
les controls étiquette, Image, Ligne, Rectangle n'ont pas de propriété
ENABLED,LOCKED. Les controls TabControl, Commande n'ont pas de propriété
LOCKED.

La séquence d'événements à l'ouverture du formulaire est :
OPEN LOAD RESIZE CURRENT

Pour que le code marche il est préférable soit de placer le code dans
l'événement
Current (Sur Activation) ou qu'il n' y ait pas d'autre modification de
l'état des controls dans ce même événement.

"dadpub" a écrit :

Bonjour,

En effet, c'était mon Onglet et ses Pages qui posaient problème !
Reste un truc bizarre : J'ai 5 ou 6 boutons de commande, et un et un seul
se
retrouve désactivé, pas les autres !!!
Y'aurait pas comme un bug ?

Merci.

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

> si le code marche. Mais tu dois avoir des controls qui n'ont pas de
> propriétés ENABLED et LOCKED comme des lignes ou des rectangles.
>
> "dadpub" a écrit :
>
>> Salut,
>>
>> "Dragan" a écrit dans le message de
>> news:
>>
>> > Ouais, tu peux te servir d'une moulinette comme suit :
>> >
>> > Dim Ctrl as Access.Control
>> >
>> > For Each Ctrl In Form.Controls
>> > IF Ctrl.ControlType<>AcImage AND Ctrl.ControlType<>AcLabel THEN
>> > Ctrl.EnabledúLSE
>> > Ctrl.Locked=TRUE
>> > END IF
>> > Next
>>
>> Marche pas !
>> J'ai le message "erreur 438"
>> "propriete ou methode non gere par cet objet"
>> Merci.
>>
>>
>>







Avatar
dadpub
Bonjour,

"michel chambrillon" a écrit dans le
message de news:
Re bonjour
Tu dis que le code fait des modifs si tu ne les enregistres pas avant il
est impossible de mettre allowEdits a false tant que elles ne sont pas
sauvegardees ajoute Me.Dirty = False


J'ai bien ajouté ce bout de code sans succès...

avant d'interdire les modifs
Tu parles aussi de sous form le champ DateAmis


Non, ce champ est dans le formulaire principal.
J'ai finalement utilisé la solution de Dragan qui semble fonctionner
corectement.
(Voir ma dernière réponse à Dragan)
Merci.

est il dans le form principal ou dans le sous form
Si c'est dans un sous form on le reference par
Me![nomdusous form].form!dateAdmis
Plus
Michel
"dadpub" a écrit dans le message de
news:
Bonsoir,
C'est sympa de m'aider ...
J'étais en train de comprendre ceci, de "maitre Raymond" ! Qu'en
penses-tu ?
http://groups.google.com/group/microsoft.public.fr.access/browse_thread/thread/2b2983ed9caa7f43/7758a51eb1c0b575?hl=fr&lnk=gst&q=AllowEdits+ne+peut+pas+intervenir+si+dirty+est+%C3%A0+True#7758a51eb1c0b575

Tu me dis de mettre le code sur Activation et pas sur Open.
J'ai essayé ce code quasiment sur tous les evenements sans succés.
A ce stade il faut peut-etre preciser 2 choses :
- J'ai 3 sous-formulaires dans mon formulaire, et je me demande si
l'insuccés viendrait pas de là !
- Sur Activation (tiens, tiens !) le code fait tout un tas de
vérifications et donc de modifications d'enregistrement, le probleme
pourrait venir de là aussi !
Exemple de code :
'-------------------------------
If Sexe.Value = "Male" Then
Menopause.Enabled = False
Else
Menopause.Enabled = True
End If
'--------------------------------
@ +
Merci.

"michel chambrillon" a écrit dans le
message de news:
re Bonjour
L'evenement form_open ne me semble pas etre le bon
Il faut ecrire ton code pour qu'il s'execute a chaque changement
d'enregistrement car si j'ai bien compris dateAdmis est un champ de la
table.Donc a l'evenement form_open il tient compte que du dateAdmis du
premier enr.
Affecte ton code a l'evenement sur activation en VBA form_current
@plus
Michel
"dadpub" a écrit dans le message de
news:O$
Re-salut,
Petite rectification !
Le code ci-dessous marche .... la première fois que j'ouvre le
formulaire.
Mais si je le ferme et re-ouvre sur un autre enregistrement, ben ça
marche plus ! ! !
C'est quoi ?
Merci

'---------code------------------------------
Private Sub Form_Open(Cancel As Integer)

Dim Mydate1 As Date
Dim Mydate2 As Date
Dim NbJour As Integer
Mydate1 = Now
Mydate2 = DateAdmis
NbJour = Mydate1 - Mydate2

If NbJour > 60 Then
Me!Rectangle.BackColor = 255
Me.AllowEdits = False
Else
Me!Rectangle.BackColor = 65408
Me.AllowEdits = True
End If

End Sub
'------fin-code------------------------------
















1 2