IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Conditions de validation d'un formulaire [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Par défaut Conditions de validation d'un formulaire
    Bonjour à tous!

    Je suis actuellement en train d'essayer, malgré mes faibles connaissances en programmation, de créer un formulaire sous access 2007 avec des conditions de validation en VBA.

    Mon problème est le suivant:

    J'ai donc un formulaire (F_AjoutDonnees) comprenant 10 champs dont 3 obligatoires. L'enregistrement des données ne doit pas pouvoir s'effectuer si ces 3 champs sont null ou vide.

    Mon ébauche de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub SaveExit_Click()
        If MsgBox("Désirez-vous vraiment enregistrer?", vbOKCancel, "Enregistrer et Quitter") = vbOK  Then
           	'si tous les champs sont null ou vide
    	      If ???
                		MsgBox "Vous devez entrer des données avant d'enregister", vbOK, "Formulaire vide"
            'si des champs obligatoires sont manquants
                  If IsNull(Me![Champ1]) Or IsNull(Me![Champ2]) Or  IsNull(Me!  [Champ3]) Or IsEmpty(Me![Champ1]) Or IsEmpty(Me![Champ2]) Or IsEmpty(Me![Champ3]) Then
                            MsgBox "Les champs suivants sont obligatoires:  (indique les champs manquants) ",  vbOK, "Champs manquants"	
    	'si tous les champs obligatoires sont ok
                  Else	
    		DoCmd.Close acForm, "F_AjoutDonnees" 
                  End If
        End If
    End Sub
    3 questions:

    1- Pouvez vous m'aider sur la traduction vb de "si tous les champs sont null OU vide" ?
    2- Est-il possible d'obtenir le nom dans une msgbox des champs vides ou null?
    3- Comment faire pour modifier la couleur des bordures des champs vides ou null?

    Merci d'avance pour votre aide!

  2. #2
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour Nono075,

    La méthode la plus certaine est de mettre la validation au niveau de la table. Null interdit = Oui pour les champs concernés.

    Bonne journée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Par défaut
    Citation Envoyé par Robert1957 Voir le message
    La méthode la plus certaine est de mettre la validation au niveau de la table. Null interdit = Oui pour les champs concernés.
    Le problème avec null interdit = oui et Chaine vide autorisée = Non est que si je clique sur un champ je dois absolument laisser une valeur sinon impossible de passer a un autre champ.
    Mon formulaire est destiné a recueillir des informations rapidement lors d'un échange téléphonique donc il me semblerait préférable de ne pas avoir de message d'erreur lors de la saisie mais uniquement à la validation.
    Du coup est-ce possible?

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour Nono075.

    Avec la règle au niveau de la table c'est exactement ce qui va se passer. Tant que tu ne sauvegardes pas il n'y a pas de problème tu peux passer d'un champ à l'autre sans aucune restriction. La règle de validation se fera seulement au moment de l'enregistrement du record.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Par défaut
    Ok merci je viens de tester et c'est vrai que ca marche plutot bien avec null interdit.

    Ca simplifie pas mal mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub SaveExit_Click()
        If MsgBox("Désirez-vous vraiment enregistrer?", vbOKCancel, "Enregistrer et Quitter") = vbOK Then
                DoCmd.Save acForm, "F_AjoutDonnees"
                DoCmd.Close acForm, "F_AjoutDonnees"
        End If
    End Sub
    Le DoCmd.Close fait bien son job mais pas DoCmd.Save apparament! Problème de syntaxe?

  6. #6
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour Nono075,

    En complément à mon autre réponse si ce qui est important pour toi est :
    2- Est-il possible d'obtenir le nom dans une msgbox des champs vides ou null?
    3- Comment faire pour modifier la couleur des bordures des champs vides ou null?
    Tu pourrais mettre un code qui ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub SaveExit_Click()
     
        Dim vaChamp As Variant
        Dim i As Integer
        Dim strMessage As String
        'Mettre les bordures à la couleur original, ici noir
        i = 1
        While i < 4
            Me("Champ" & i).BorderColor = 10
            i = i + 1
        Wend
        'Pas de message
        strMessage = ""
        'Récupérer les champs null
        If IsNull(Me.Champ1) Or Me.Champ1 = "" Then
            vaChamp = Me.Champ1.Name & ";"
        End If
        If IsNull(Me.Champ2) Or Me.Champ2 = "" Then
            vaChamp = vaChamp & Me.Champ2.Name & ";"
        End If
        If IsNull(Me.Champ3) Or Me.Champ3 = "" Then
            vaChamp = vaChamp & Me.Champ3.Name & ";"
        End If
        vaChamp = Split(vaChamp, ";")
        'Composer le message et changer la couleur de bordure
        For i = 0 To UBound(vaChamp) - 1
            If strMessage = "" Then
                strMessage = "Vous devez remplir le champ: " & vaChamp(i)
                Me(vaChamp(i)).BorderColor = 255
            Else
                strMessage = strMessage & " et le champ " & vaChamp(i)
                Me(vaChamp(i)).BorderColor = 255
            End If
        Next i
        'S'il y a des null afficher le message
        If strMessage <> "" Then
            MsgBox strMessage, vbCritical
        End If
     
    End Sub
    Pour préciser ce qui doit être saisie. Mais en gardant la règle sur la table ce qui est je crois le mieux.

    Bonne journée

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Par défaut
    Robert1957, tu es mon nouveau Dieu!! Ça fonctionne nickel!

    Mais du coup comment j'intègre la sauvegarde ainsi que la fermeture du formulaire une fois tous les champs obligatoires remplis?

  8. #8
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Citation Envoyé par Nono075 Voir le message

    Le DoCmd.Close fait bien son job mais pas DoCmd.Save apparament! Problème de syntaxe?
    .Save enregistre l'objet formulaire (l'interface) et non le contenu.

  9. #9
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour Nono075,

    À l'intérieur de ton If :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub SaveExit_Click()
        If MsgBox("Désirez-vous vraiment enregistrer?", vbOKCancel, "Enregistrer et Quitter") = vbOK Then
        Dim vaChamp As Variant
        Dim i As Integer
        Dim strMessage As String
        'Mettre les bordures à la couleur original, ici noir
        i = 1
        While i < 4
            Me("Champ" & i).BorderColor = 10
            i = i + 1
        Wend
        'Pas de message
        strMessage = ""
        'Récupérer les champs null
        If IsNull(Me.Champ1) Or Me.Champ1 = "" Then
            vaChamp = Me.Champ1.Name & ";"
        End If
        If IsNull(Me.Champ2) Or Me.Champ2 = "" Then
            vaChamp = vaChamp & Me.Champ2.Name & ";"
        End If
        If IsNull(Me.Champ3) Or Me.Champ3 = "" Then
            vaChamp = vaChamp & Me.Champ3.Name & ";"
        End If
        vaChamp = Split(vaChamp, ";")
        'Composer le message et changer la couleur de bordure
        For i = 0 To UBound(vaChamp) - 1
            If strMessage = "" Then
                strMessage = "Vous devez remplir le champ: " & vaChamp(i)
                Me(vaChamp(i)).BorderColor = 255
            Else
                strMessage = strMessage & " et le champ " & vaChamp(i)
                Me(vaChamp(i)).BorderColor = 255
            End If
        Next i
        'S'il y a des null afficher le message
        If strMessage <> "" Then
            MsgBox strMessage, vbCritical
            Exit sub
        End If
                'DoCmd.Save acForm, "F_AjoutDonnees"
                DoCmd.Close acForm, "F_AjoutDonnees"
        End If
    End Sub
    Cependant si tu veux être plus prudent et avoir le message sur d'autres événements au lieu de mettre le code à l'intérieur de ton If tu pourrais en faire une fonction qui te retourne un vrai/faux et tu agis selon le retour de ta fonction.

    Bonne journée

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 19
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Condition de validation d'un formulaire
    Par django144 dans le forum Général Python
    Réponses: 12
    Dernier message: 14/05/2014, 15h24
  2. Conditions pour remplissage d'un Formulaire
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 15/12/2005, 15h36
  3. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 15h47
  4. Vérification de validation d'un formulaire
    Par tom06440 dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2005, 14h29
  5. Réponses: 11
    Dernier message: 16/09/2004, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo