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

IHM Discussion :

[VBA]sortir d'un formulaire après controle saisie


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 10
    Points
    10
    Par défaut [VBA]sortir d'un formulaire après controle saisie
    Bonjour à tous,

    Je sollicite vos conseils sur le problème que je rencontre. Je suis jeune débutante en prog' et n'arrive pas à solutionner mon problème toute seule.

    Dans un formulaire pour créer un nouveau collaborateur, j'ai crée un programme VBA pour controler la saisie avant enregistrement. Le principe est d'informer l'utilisateur que certains champs sont vides et donc de les renseigner (voir exemple en pièce jointe). Mon problème est que lorsque tous les champs sont renseignés, mon message s'affiche toujours (sans lister les champs puisque tous remplis) et je n'arrive pas à quitter mon formulaire. En revanche, l'enregistrement de la nouvelle ressource est bien effectué.

    Voici le code evenementiel en question :

    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
    Private Sub btn_save_quit_Click()
    
    'vérification de la saisie avant enregistrement
    
    Dim retour_erreur As String
    
    retour_erreur = "Ce collaborateur ne peut être enregistré car les donnnées suivantes ne sont pas renseignées"
    
    If IsNull(Me.txt_matricule) Or IsEmpty(Me.txt_matricule) Or Me.txt_matricule = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Matricule"
        End If
        
    If IsNull(Me.txt_gestionnaire) Or IsEmpty(Me.txt_gestionnaire) Or Me.txt_gestionnaire = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Gestionnaire"
        End If
    If Me.choix_respm1 = 0 Or IsNull(Me.choix_respm1) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M1"
        End If
    If Me.choix_respm2 = 0 Or IsNull(Me.choix_respm2) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M2"
        End If
    If Me.choix_secteur = 0 Or IsNull(Me.choix_secteur) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Secteur"
        End If
    If Me.choix_profil = 0 Or IsNull(Me.choix_profil) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Profil"
        End If
    If IsNull(Me.txt_login) Or IsEmpty(Me.txt_login) Or Me.txt_login = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Login"
        End If
    
    'message envoyé si erreur de saisie
    MsgBox retour_erreur, vbCritical, "ENREGISTREMENT IMPOSSIBLE"
    Me.txt_matricule.SetFocus
    Exit Sub
    
       
        
    End Sub
    J'ai essayé avec docmd.close, avec la fonction else mais cela ne fonctionne pas. J'ai dû zapper quelque chose.

    Merci d'avance pour vos éclaircissements.
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Bonjour,

    tu peux très bien changer ton code de la manière suivante:

    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
    44
     
    Private Sub btn_save_quit_Click()
     
    'vérification de la saisie avant enregistrement
     
    Dim retour_erreur As String
     
    retour_erreur = "Ce collaborateur ne peut être enregistré car les donnnées suivantes ne sont pas renseignées"
     
    If IsNull(Me.txt_matricule) Or IsEmpty(Me.txt_matricule) Or Me.txt_matricule = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Matricule"
        End If
     
    If IsNull(Me.txt_gestionnaire) Or IsEmpty(Me.txt_gestionnaire) Or Me.txt_gestionnaire = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Gestionnaire"
        End If
    If Me.choix_respm1 = 0 Or IsNull(Me.choix_respm1) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M1"
        End If
    If Me.choix_respm2 = 0 Or IsNull(Me.choix_respm2) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M2"
        End If
    If Me.choix_secteur = 0 Or IsNull(Me.choix_secteur) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Secteur"
        End If
    If Me.choix_profil = 0 Or IsNull(Me.choix_profil) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Profil"
        End If
    If IsNull(Me.txt_login) Or IsEmpty(Me.txt_login) Or Me.txt_login = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Login"
        End If
     
    'message envoyé si erreur de saisie
    if retour_erreur ="" then
    else
    retour_erreur = "Ce collaborateur ne peut être enregistré car les donnnées suivantes ne sont pas renseignées" & retour_erreur
    MsgBox retour_erreur, vbCritical, "ENREGISTREMENT IMPOSSIBLE"
    Me.txt_matricule.SetFocus
    endif
    Exit Sub
     
     
     
    End Sub
    Maintenant je pense qu'il serait préférable de définir si tu veux ajouter 1 seul collaborateur ou plusieurs. dans ce cas il faudrait mettre ton code dans "before Update" pour tester si tout les champs sont remplis.

    bonne chance

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Le message s'affiche parce que quoi qu'il arrive tu l'affiches. Il n'y a aucun if qui permet de passer à côté. Ton code ne fait que remplir l'erreur et l'envoyer quoi qu'il arrive
    Il faudrait plus un truc du genre:
    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
    Private Sub btn_save_quit_Click()
     
    'vérification de la saisie avant enregistrement
     
    Dim retour_erreur As String
     
    retour_erreur = "Ce collaborateur ne peut être enregistré car les donnnées suivantes ne sont pas renseignées"
     
    If Me.txt_matricule = empty Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Matricule"
        msgbox retour_erreur
        Me.txt_matricule.SetFocus
        exit sub
    End If
     
    If Me.txt_gestionnaire = empty Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Gestionnaire"
        msgbox retour_erreur
        Me.txt_gestionnaire.SetFocus
        exit sub
    End If
     
    If Me.choix_respm1 = 0 Or IsNull(Me.choix_respm1) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M1"
        End If
    If Me.choix_respm2 = 0 Or IsNull(Me.choix_respm2) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Responsable M2"
        End If
    If Me.choix_secteur = 0 Or IsNull(Me.choix_secteur) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Secteur"
        End If
    If Me.choix_profil = 0 Or IsNull(Me.choix_profil) = True Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Profil"
        End If
    If IsNull(Me.txt_login) Or IsEmpty(Me.txt_login) Or Me.txt_login = "" Then
        retour_erreur = retour_erreur & Chr(10) + Chr(13) & "Login"
        End If
    J'ai fait que les deux premier! (fénéantise )
    Au passage tu n'as pas besoin de mettre isNull et isEmpty et encore = ""! Un seul des trois suffit pour savoir si il y a qq chose dans le champ
    Voila tien nous au courant

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Citation Envoyé par Alexandre Sahli Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'message envoyé si erreur de saisie
    if retour_erreur ="" then
    else
    endif
    Ce if ne fonctionnera pas puisqu'au début de son code la variable retour_erreur n'est pas vide!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour_erreur = "Ce collaborateur ne peut être enregistré car les donnnées suivantes ne sont pas renseignées"

  5. #5
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    c'est vrai j'ai oublié de le mettre à "" au début

    merci

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous les 2,
    Merci pour vos précieux conseils, je m'en suis sortie avec la solution de MattU.
    A bientôt, j'aurai surement d'autres questions!

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2008
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 221
    Points : 244
    Points
    244
    Par défaut
    Content que ca fonctionne !
    Bonne continuation à toi.

    Et n'oublie pas de cliquer sur résolu en bas de la page une fois qu'il n'y a plus de problème

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

Discussions similaires

  1. Re-remplir un formulaire apres une saisie erroné
    Par SofEvans dans le forum Langage
    Réponses: 8
    Dernier message: 27/11/2009, 22h05
  2. Réponses: 1
    Dernier message: 19/01/2008, 12h55
  3. Javascript saisie dans un formulaire et controle
    Par ChrisMan dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/05/2007, 13h29
  4. Réponses: 5
    Dernier message: 20/10/2006, 15h26
  5. [VBA-E] afficher des données apres saisie dans cellule
    Par user0505 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2006, 14h04

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