{Access}problème condition sur menu déroulant

Résolu/Fermé
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 - 1 mars 2010 à 10:41
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 - 4 mars 2010 à 15:53
Bonjour,
J'ai mis au point certaines contraintes dans mon formulaire, comme ne pas pouvoir entré de valeur dans l'un des champs si la condition n'est pas vérifiée. Exemple : j'ai un champ allocation chômage en OUI/NON, et un champ montant, le champ montant ne peux pas avoir de valeur si la personne ne touche pas d'allocation, donc on ne peut remplir que si allocation chômage =-1.

Ce qui se passe c'est que je peux rentrez des valeurs dans le champs mais quand je veux le validé, il affiche le message d'erreur que je lui ai donné, ca me convenait pour de simple champs comme ca.

Ici j'ai des listes déroulantes dépendant d'autre listes déroulantes, (exemple : dans mon cas j'ai les différents niveaux de diplômes possible, et pour certain cas, j'ai des sous cas possible (un enseignement secondaire du 2ème degré peut être fait en Général, technique de transition, ou technique de qualification (pour simplifier^^")). J'ai fait une condition qui teste si la valeur du menu déroulant gérant les différents niveau de diplômes possible est égal à la bonne valeur ou pas. ( voici la condition : [Enseignement Général]=3 Ou [Enseignement Général]=4, il y a deux cas ou ce menu déroulant peut être utilisé).

Il accepte bien que si ces cas sont vérifié sinon il affiche un message d'erreur. Le problème est que si je modifie le premier menu déroulant, c'est à dire celui qui montrent les différents niveaux de dîplômes, access ne teste plus le champs dépendant, et je me retrouve avec une valeur fausse, vu que la condition n'est pas vérifiée.

Ma demande est celle-ci, je cherche le moyen de supprimer les champs dépendant si le premier menu déroulant est modifié afin d'empêcher la mise en place de fausse information dans la base de donnée.

J'aurais une deuxième question, qui concerne aussi les conditions mises en place, n'y a t il pas un moyen d'empêcher l'entrée de donnée, que ce soit un champ déroulant, ou un champ texte si la condition n'est pas valable, c'est bien beau d'empêcher la validation, mais ce serait mieux d'empêcher l'entrée d'information qui de toute manière ne seront pas validée.

J'espère avoir été clair, merci d'avance pour votre aide.
A voir également:

8 réponses

blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
1 mars 2010 à 11:26
On supppose :

- un formulaire nommé form1
- une liste déroulante nommée liste1
- une liste déroulante nommée liste2
- un champ nommé champ1

L'opération consiste à créer une fonction qui sera appelée lors du changement de valeur de liste1 ou de liste2. Cette fonction ira vérifier les valeurs de liste1 ET de liste2 puis en déduira l'action à faire sur champ1 : masquage/démasquagee, verrouillage/déverrouillage, remise à zéro...

Cependant, il faudra que champ1 soit verrouillé à l'entrée sur form1.

Est-ce que ça répond à ta demande ?
1
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
1 mars 2010 à 10:52
Salut,

tu peux masquer/invalider des champs lorsque tu saisis une certaine valeur dans une liste.

Peut-être que cela répond à te demande ?
0
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 22
1 mars 2010 à 11:05
Merci de la réponse, je vois bien ce que tu veux me faire faire, mais j'ai cherché le moyen de le mettre en place, mais ne le trouve pas, j'avais déjà pensé a cette possibilité, elle rejoint d'ailleurs ma deuxième question.

Pourrais tu m'expliquer la marche à suivre?
0
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 22
1 mars 2010 à 14:34
Merci pour ton aide, j'ai eu du mal a trouver le code correct mais j'y suis finalement parvenu, il a l'air de bien prendre en compte les changements. Je n'ai pas verrouillé liste 1 comme mis dans ton exemple, et ca fonctionne bien ainsi.

J'ai utilisé ce code ci, je le mets a titre indicatifs ca pourrait être utile à d'autre : (petit lexique Enseignement général est la liste dont dépende les deux autres, les deux commençants par "sous cas" sont les listes qui dépende de la première)

Private Sub Enseignement_Général_AfterUpdate()
[Sous_cas_pour_2ème__3ème__].Visible = False
[Sous_cas_pour_secondaire_complémentaire].Visible = False
If [Enseignement Général] = "3" Or [Enseignement Général] = "4" Then
[Sous_cas_pour_2ème__3ème__].Visible = True
ElseIf [Enseignement Général] = "5" Then
[Sous_cas_pour_secondaire_complémentaire].Visible = True
Else
[Sous_cas_pour_2ème__3ème__].Visible = False
[Sous_cas_pour_2ème__3ème__] = Null
[Sous_cas_pour_secondaire_complémentaire].Visible = False
[Sous_cas_pour_secondaire_complémentaire] = Null

End If
End Sub


J'ai également ceci dans l'ouverture du formulaire afin qu'il soit également caché au démarrage du formulaire:
Private Sub Form_Current()
[Sous_cas_pour_secondaire_complémentaire].Visible = False
[Sous_cas_pour_2ème__3ème__].Visible = False
End Sub



Je ne sais pas si c'était la meilleure solution, mais en y réfléchissant avec ce que tu m'as donné comme information et mes petites connaissances en VBA, c'est ce que j'ai trouvé de mieux.

Mais il me reste encore deux petit truc que j'aimerais améliorer si possible, je cherche le moyen de rafraichir pas la page mais juste le champs en cas de modification, bien qu'il ne sauvegarde pas avec les informations si je change et que les conditions ne sont plus valide, quand je regarde dans le bas de mon formulaire double affichage, je vois apparaître les informations comme si elle était dans une feuille de donnée, et la ca prend du temps à se mettre à jour, c'est du chipotage, mais j'aimerais que pour les utilisateurs leur affichage soit propre, même si je ne pense pas le mettre en double affichage, je préfère prévoir toute les possibilités.

Le deuxième est qu'ici j'ai mis le numéro correspondant au numéro de la clé de l'entrée que je voulais tester dans ma condition, j'ai essayé de mettre le nom en entier mais il ne l'accepte pas. Ça pourrait poser problème si un jour on modifiait la table dans laquelle se trouve ma liste déroulante car le numéro ne serait plus le même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
1 mars 2010 à 15:59
Je n'ai pas verrouillé liste 1
Ca tombe bien, je ne l'avais pas proposé :-)

je cherche le moyen de rafraichir pas la page mais juste le champs en cas de modification
Si tu fais une modif dans le champ, elle est visible immédiatement, non ? Ou alors, ce que tu appelles 'champ' n'est pas ce que je pense...

Le deuxième est qu'ici j'ai mis le numéro correspondant au numéro de la clé de l'entrée que je voulais tester dans ma condition, j'ai essayé de mettre le nom en entier mais il ne l'accepte pas. Ça pourrait poser problème si un jour on modifiait la table dans laquelle se trouve ma liste déroulante car le numéro ne serait plus le même.
Pas compris...
0
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 22
1 mars 2010 à 16:29
c'était pas liste 1 mais champ 1 désolé.

Pour rafraichir, sur le formulaire en double affichage, j'ai une partie normale et une partie en feuille de donnée, sur la partie "normale", je vois la modification immédiatement, sur celle en feuille de données il y a une certaine latence, le temps varie, parfois c'est presque automatiquement, parfois ca prend un peu de temps, il finit par le faire mais bon.

Pour la deuxième, désolé de ce fouillis, je vais essayer de reformuler ca plus clairement. Dans la table ou j'ai créer les options pour le menu déroulant, y a un numéro qui me sert de clé primaire et un champ pour les options. ici je me sert du numéro dans mon code pour faire mes tests, et j'aimerais faire les test directement sur l'option, je sais pas si c'est possible.
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
1 mars 2010 à 16:36
1 - sous_form.refresh ou sous_form.repaint ?

2 - Une zone de liste renvoie par défaut la valeur qui est dans la 'colonne liée', mais on peut parfaitement lire le contenu des autres colonnes : zone_de_liste.column(0), zone_de_liste.column(1), ....
0
Iruka72 Messages postés 255 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 5 juin 2014 22
4 mars 2010 à 15:53
Au final on dirait que le problème ne se produit plus, et le code mis pour le menu déroulant fonctionne, désolé du temps de réponse, j'ai fait plusieurs test et on dirait que je suis finalement parvenu à faire ce que je désirais merci.
0