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 27/12/2010, 15h24   #1
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 57
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 57
Points : 19
Points : 19
Par défaut Comment vérifier de façon générique que des contrôles obligatoires sont saisis

Bonjour à tous,

Voici mon problème :

1 - J'ai réalisé plusieurs formulaires de saisie, chacun alimenté par une requête plus ou moins complexe (une vue) basée sur une table différente mais ramenant des informations liées dans d'autres tables.

2 - Lors de la validation de la saisie d'un enregistrement dans un quelconque de ces formulaires, je souhaite vérifier par code VBA que les contrôles, dont la source est un champ déclaré obligatoire dans la table sur laquelle est basée la requête d'alimentation du formulaire concerné, sont bien renseignés et donc non null.

3 - Je souhaite effectuer cette vérification de façon générique tel que :

Pour chaque contrôle du formulaire
si contrôle = obligatoire alors
si contrôle = renseigné alors
OK on passe au contrôle suivant
sinon
Message d'alerte et sortie boucle Pour (en fait on interdit en conséquence la sortie du formulaire jusqu'à ce que le contrôle en question soit saisi)
fin si
fin si
on passe au contrôle suivant
fin pour

DONC : comment réaliser le test "contrôle = obligatoire" ?

Si qq'un dispose de la solution car là je tourne en rond et manifestement je ne sais pas faire ou bien je ne vois pas comment faire .

D'avance MERCI de votre aide
Cordialement
oracle7556
oracle7556 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h34   #2
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 037
Points : 11 037
Bonjour,

Le nom du champ te permet-il de déterminer s'il doit intervenir ?

Ex les contrôles de ce type commencent tous par xxxx
Autre exemple : leur nom = celui de la source
Autre exemple : tous les contrôles de tels types (zone de texte, zone de liste..)

En d'autres mots y a-t-il, une logique qui permet de dire que ce contrôle doit être complété ?
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h06   #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 037
Points : 11 037
Essaie ceci, associé par exemple au clic d'un bouton :
Code :
1
2
3
4
Dim ctl As Control
For Each ctl In Me.Controls
   If IsNull(ctl) Then MsgBox ctl.Name & " n'est pas valide"
Next ctl
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h32   #4
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut ClaudeLELOUP et oracle7556,

mettre la propriété du champ 'null interdit' à 'Oui' ne pourrait pas te suffire ?
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/12/2010, 16h32   #5
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 57
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 57
Points : 19
Points : 19
Bonjour ClaudeLELOUP

1 - Merci de votre réponse rapide.

2 -
Citation:
En d'autres mots y a-t-il, une logique qui permet de dire que ce contrôle doit être complété ?
Malheureusement NON.
Mes champs sont nommés tels que :
XXX_NUM : avec XXX = trigramme de la table, ce sont des champs de clés ou de liens avec une autre table
XXX_Y_ZZZZZZZZ : avec Y = code du type du champ (A ALPHANUM, L LONG, E ENTIER, T TEXTE, ....) et avec ZZZZZZZZ = libellé libre
En aucun cas je n'ai prévu de signe distinctif pour indiquer que le champ est obligatoire ou non (saisie = not null).

3 - Votre exemple de code correspond à une partie du pseudo code que j'ai indiqué dans mon premier post.
Désolé mais il a malheureusement le défaut de signaler TOUS les champs non saisis sans exception et ce n'est pas le but recherché car d'une part tous les champs ne sont pas obligatoires en saisie et d'autre part cela générerait trop de messages d'alerte qui alourdiraient la validation du formulaire.
Il n'est donc pas suffisant à mon besoin.

Cordialement
oracle7556
oracle7556 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h35   #6
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 57
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 57
Points : 19
Points : 19
Bonjour vodiem

Citation:
mettre la propriété du champ 'null interdit' à 'Oui' ne pourrait pas te suffire ?
C'est déjà en place au niveau des tables. il me faut maintenant récupérer facilement cette info pour la tester dans ma fonction (voir premier post)

Cordialement
oracle7556
oracle7556 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h38   #7
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 037
Points : 11 037
Si la suggestion de Vodiem (que le salue!) ne te suffit pas, tu pourrais te servir de la propriété "Remarque" (Tag) des contrôles concernés pour déclencher le processus de manière sélective.
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/12/2010, 16h40   #8
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
si c'est mis au niveau des tables c'est normalement suffisant puisque l'enregistrement ne pourra passer la validation.

mais bon, une solution à ton pb serait d'utiliser la propriété remarque du control.
et dans ta boucle vérifier que la propriété 'tag' a la valeur que tu auras mis ex: 'obligatoire' (ou non null)


ps: ClaudeLELOUP tu m'as devancé ;p
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 16h54   #9
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 936
Points : 7 936
peut-être en utilisant l'attribut Required du champ pour savoir s'il est requis :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Dim loCtl As Access.Control
Dim lRequired As Boolean
' Pour chaque contrôle
For Each loCtl In Me.Controls
    ' Recherche si le contrôle a un champ comme source
    '    et si le champ est requis
    lRequired = False
    On Error Resume Next
    lRequired = Me.Recordset.Fields(loCtl.ControlSource).Required
    On Error GoTo 0
    ' Si champs requis
    If lRequired Then
        ' Si contrôle vide
        If Nz(loCtl.Value, "") = "" Then
            ' Avertissement
            MsgBox loCtl.Name & " obligatoire!"
            ' Un seul avertissement => on sort
            Exit For
        End If
    End If
Next
(si besoin, rebrancher la gestion d'erreurs à la place du On Error Goto 0)
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 27/12/2010, 17h13   #10
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 037
Points : 11 037
pour vodiem : Ok Vodiem mais Arkham46, c'est encore autre chose !

pour Arkham46 :

pour oracle7556 : merci d'être venu !
__________________
Amoureuse/amoureux de la langue française ? Vous pouvez nous aider à corriger nos ressources !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 17h52   #11
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 57
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 57
Points : 19
Points : 19
Bonjour Arkham46

1 - Énorme MERCI : c'est exactement ce que je voulais.
Je garde précieusement le truc pour exploiter une propriété d'un champ source d'un contrôle de formulaire. C'est justement sur ce point que je butais.
Au final, je n'ai qu'à compléter votre exemple de code pour adapter le traitement selon le type du champ obligatoire (Numérique en plus de alphanumérique) et ce sera parfait.

2 - Un grand MERCI aussi à vous deux ClaudeLELOUP et vodiem d'avoir bien voulu consacrer un peu de votre temps pour m'aider.

3 - Je considère le post comme résolu.

Merci encore de votre aide à tous.
Cordialement
oracle7556
oracle7556 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 10h05.


 
 
 
 
Partenaires

Hébergement Web