Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/06/2011, 19h27   #1
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Par défaut Verrouiller certains enregistrements dans un sous-formulaire en mode feuille de données

Bonjour,

Dans ma base de donnée de gestion des membres d'une association, j'ai :
  • un formulaire "Membres" en mode Formulaire qui comprend
  • un sous-formulaire "Sous_formulaire_cotisations". Ce sous-formulaire est en mode Feuille de données. Ce sous formulaire a un champ [Année].
A l'aide d'une macro, j'arrive à verrouiller les champs du sous formulaire si le champ [Année] est différent de Année(Date()). Par contre cette formule me verrouille les champs de l'enregistrement de l'année en cours.

Comment verrouiller tous les enregistrements où [Année] <> Annéee(Date()) mais pas l'enregistrement où [Année] = Annéee(Date()) ?

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 07h36   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 616
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 616
Points : 30 954
Points : 30 954
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Cela devrait fonctionner en passant par la Mise en Forme Conditionnel où tu peux activer ou non un champ.

La mise en forme conditionnelle sous Access, notamment cette partie : http://warin.developpez.com/access/mfc/#L2.4.2

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 07h54   #3
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Citation:
A l'aide d'une macro, j'arrive à verrouiller les champs du sous formulaire si le champ [Année] est différent de Année(Date()). Par contre cette formule me verrouille les champs de l'enregistrement de l'année en cours.

Manipuler des dates réserve souvent des surprises.
Une piste possible : dans ton cas, il se peut que tu compares une année exprimée en 4 chiffres à une année exprimée en 2 chiffres :
"2011" et "11" sont différents tout comme "2010" et "11".
Ce qui te fait croire que ta macro fonctionne quand c'est différent.
C'est toujours différent !
Essaie d'afficher les 2 valeurs, pour vérifier.

PS : l'occasion de saluer Philippe !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h43   #4
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Citation:
Envoyé par Philippe JOCHMANS Voir le message
Bonjour

Cela devrait fonctionner en passant par la Mise en Forme Conditionnel où tu peux activer ou non un champ.

La mise en forme conditionnelle sous Access, notamment cette partie : http://warin.developpez.com/access/mfc/#L2.4.2

Philippe
Bonjour,

Dans mon sous-formulaire, avec la mise en forme conditionnelle les champs sont en grisé si l'année de l'enregistrement n'est pas l'année en cours sauf pour les cases à cocher. Mais je cherche à verrouiller les enregistrements si l'année de l'enregistrement n'est pas l'année en cours, ceci dans un sous-formulaire en mode feuille de données.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 17h54   #5
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Citation:
Envoyé par ClaudeLELOUP Voir le message
Bonjour,
Manipuler des dates réserve souvent des surprises.
Une piste possible : dans ton cas, il se peut que tu compares une année exprimée en 4 chiffres à une année exprimée en 2 chiffres :
"2011" et "11" sont différents tout comme "2010" et "11".
Ce qui te fait croire que ta macro fonctionne quand c'est différent.
C'est toujours différent !
Essaie d'afficher les 2 valeurs, pour vérifier.
Bonjour,

Dans ma macro, si la condition :
[Cotisations_tout].Form![Année] <> VraiFaux(Mois(Date())<9;Année(Date())-1;Année(Date()))
(pour obtenir 2010 entre le 01-sept et le 31-août, [Année] est un nombre entier) est vérifiée je verrouille tous les champs du sous-formulaire, si non je déverrouille tous les champs.
Ce qui ne semble pas poser de difficulté d'interprétation. La seule chose qui ne fonctionne pas : soit tous les enregistrements du sous-formulaire en mode feuille de données sont verouillés soit ils ne le sont pas. Ce n'est pas ce que je désire.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 18h29   #6
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Pour vérifier, dans la fenêtre d'exécution saisis :

Code :
? iif(month(Date())<9,year(Date())-1,year(Date()))  <enter>
Code :
? Forms !Membres. [Cotisations_tout].Form.[Année] <enter>
et compare les 2 valeurs.

Que donne ceci :

Code :
? iif(month(Date())<9,year(Date())-1,year(Date()))  = Forms !Membres. [Cotisations_tout].Form.[Année]
Vrai ou Faux ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 19h05   #7
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Excusez moi pour ma réaction tardive, mais écrire du code n'est pas simple pour moi.

Après beaucoup de tatonnements, j'ai écrit :
Code :
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
Private Sub Form_Current()
 
    ' Si l'Année_memb de l'enregistrement est inférieure à la saison en cours (du 01-sept au 31-août)
    If Me.Année_memb < IIf(Month(date) < 9, Year(date) - 1, Year(date)) Then
            ' On verrouille les champs d el'enregistrement
            msgBox "Il n'est pas possible de modifier les données des années antérieures."
            Me.Année_memb.Locked = True
            Me.Cotisation_memb.Locked = True
            Me.Badge_memb.Locked = True
            Me.Nr_badge_vérifié_memb.Locked = True
            Me.Certif_medical_memb.Locked = True
            Me.Certificat_scolarité_memb.Locked = True
            Me.Autorisation_parentale_memb.Locked = True
            Me.Observation_memb.Locked = True
            Me.Date_inscription_memb.Locked = True
            Me.Date_MàJ_memb.Locked = True
        Else
            ' Si non on déverrouille les champs de l'enregistrement
            Me.Année_memb.Locked = False
            Me.Cotisation_memb.Locked = False
            Me.Badge_memb.Locked = False
            Me.Nr_badge_vérifié_memb.Locked = False
            Me.Certif_medical_memb.Locked = False
            Me.Certificat_scolarité_memb.Locked = False
            Me.Autorisation_parentale_memb.Locked = False
            Me.Observation_memb.Locked = False
            Me.Date_inscription_memb.Locked = False
            Me.Date_MàJ_memb.Locked = False
    End If
 
End Sub
que j'ai placé sur l'évennement "Sur activation" du sous-formulaire. Cela fonctionne et les champs se verouillent et se déverrouillent en fonction de la valeur champ [Année_memb] par rapport à la valeur de la saison en cours. Par contre malgré les champs verrouillés, il est possible de supprimer l'enregistrement des années précedentes.

Que faut-il ajouter ou modifier pour empécher la suppression des enregistrements des années précedentes?

Existe-t-il une méthôde plus élégante pour verrouiller l'enregistrement et non chaque champ?

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 19h54   #8
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonsoir,

Citation:
mais écrire du code n'est pas simple pour moi
Il y a un début à tout !

Pour te documenter sur la solution à ton problème :
- ouvre ton formulaire en mode création ;
- clique sur la propriété "suppr autorisée" et enfonce <F1> ;

=> l'aide Access t'affiche la bonne page avec des exemples de code.

Après beaucoup de tâtonnements... tu finiras par jongler.

NB. Dans du code, si tu places le curseur de la souris sur un mot-clé, l'aide Access réagit de même.
Personnellement, c'est comme cela que j'ai appris.

Si tu bloques, reviens et on t'aidera.
Si tu réussis, reviens le dire, ça fait plaisir !

Courage.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 21h33   #9
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Merci, grâce à ton aide, j'ai ajouté :
Code :
Me.AllowDeletions = False
pour interdire la suppression de l'enregistrement et
Code :
Me.AllowDeletions = True
pour l'autoriser et tout fonctionne.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 18h18   #10
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour,

Je viens de m'apercevoir que si la suppression d'un enregistrement d'une saison précédente n'est plus possible, la supression de tous les enregistrements présents dans le sous-formulaire en les sélectionnant tous est possible !!

Comment interdire cela?

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 20h54   #11
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Essaie ceci :
- dans la propriété suppression autorisée, tu mets "non" ;
- dans l'évènement "sur activation" (current), si tu es dans les conditions, tu libères le verrou ;
- dans l'évènement "après suppression", tu replaces le verrou.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2011, 22h08   #12
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Merci pour ta réponse.

La manip proposée ne règle pas le problème. Pour tenter de résoudre le problème, j'ai :
* Mis dans les propriétés du sous-formulaire "Supp autorisé" à NON
* Supprimé l'autorisation de suppression dans l'évennement "Sur activation" lorsque la saison de l'enregistrement est supérieure ou égale à la saison en cours
* Placé sur l'évennement "Avant suppression"
Code :
1
2
3
4
5
' Si la saison de l'enregistrement est supérieure à la saison en cours
    If Me.Année_memb >= IIf(Month(date) < 9, Year(date) - 1, Year(date)) Then
        ' Si OUI on autorise la suppression de l'enregistrement
        Me.AllowDeletions = True
    End If
censé autoriser la suppression de l'enregistrement
* Placé sur l'évennement "Après suppression"
Code :
Me.AllowDeletions = False
et ça ne fonctionne pas.
Le déverrouillage ne se fait pas.

Où est l'erreur?

Jean-Pierre

PS : Lorsque le sous-formulaire ne comporte pas d'entegistrement pour la saison en cours, une sélection de tous les enregistrements par le bouton en haut à gauche permet de les supprimer, ce que je ne désire pas!!
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 10h01   #13
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Bonjour,

Citation:
Code :Sélectionner tout - Visualiser dans une fenêtre à part12345 ' Si la saison de l'enregistrement est supérieure à la saison en cours
If Me.Année_memb >= IIf(Month(date) < 9, Year(date) - 1, Year(date)) Then
' Si OUI on autorise la suppression de l'enregistrement
Me.AllowDeletions = True
End If
Si ce code se trouve dans le formulaire principal (Membres), ce que tu dis ici c'est :

Si la date du formulaire principal est... alors, verrouiller le formulaire principal.
N'est-ce pas le sous-formulaire que tu veux verrouiller ?

=>
Code :
me.Sous_formulaire_cotisations.form..AllowDeletions = True
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 12h30   #14
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour,

Ce que je veux : "verrouiller est la suppression des enregistrements des années passées dans le sous-formulaire en laissant possible la suppression des enregistrements de l'année en cours ou à venir".
La solution actuelle :
*verrouiller le sous-formulaire dans les propriétés,
* dans l'événement "Sur activation", déverrouiller l'enregistrement si l'année correspond à la saison en cours,
* sur l'événement "Après suppression", verrouiller
fonctionne partiellement : un enregistrement passé ne peut pas être supprimé, l'enregistrement de la saison en cours ou à venir peut être supprimé. Mais la sélection de touts les enregistrements permet de tous les supprimer y compris l'année en cours ou à venir!!!

Une solution, si elle est possible, serait de neutraliser le bouton en haut à gauche du sous-formulaire (mode feuille de données) mais il sera encore possible de sélectionner tous les enregistrements en maintenant la touche [Maj] enfoncée.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 15h04   #15
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 242
Points : 11 040
Points : 11 040
Vois l’exemple en annexe.

Le sous-formulaire : suppression autorisée : non. => impossible de supprimer tout ou partie !
Lorsque les conditions sont rencontrées, un bouton « Supprimer » est rendu visible.
Si tu cliques sur ce bouton, l’enregistrement est supprimé. En fait, on exécute une requête qui supprime cet enregistrement-là.

Vois le code associé à « sur activation » du sous-formulaire.
Vois le code associé à « sur clic » du bouton « supprimer » dans le formulaire principal.
J’y ai mis du commentaire qui te permettra de comprendre le code.
N’oublie pas <F1> et reviens si problème.
Fichiers attachés
Type de fichier : zip 20110620JeanPierre78.zip (14,8 Ko, 5 affichages)
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 13h51   #16
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour Claude,

Merci ton exemple adapté à ma Bd fonctionne nickel.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h47.


 
 
 
 
Partenaires

Hébergement Web