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 :

Controler la saisie d'une date


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Controler la saisie d'une date
    Bonjour,

    J'ai 2 champs dépendants de type date dans un formulaire de saisie/modification de Cde : DateLiv et DateDep.

    Lors de la saisie, je souhaite que :
    - DateLiv et DateDep soient strictement supérieures à la date du jour
    - DateDep soit antérieure à DateLiv

    Voici une partie de mon code, qui ne fonctionne pas malheureusement (rien ne se passe :

    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
    Private Sub DateLiv_BeforeUpdate(Cancel As Integer)
     
        Dim DateLivraison As String
        Dim DateJour As String
     
        DateJour = Date
     
        If (IsNull(Me.[DateLiv]) Or Me.[DateLiv].Value <> "") Then
            Exit Sub
        Else
            DateLivraison = [DateLiv]
            If (DateLivraison <= DateJour) Then
                MsgBox "Date de livraison incorrecte", vbCritical
            Exit Sub
            End If
        Exit Sub
        End If
     
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 34
    Points : 32
    Points
    32
    Par défaut Autant pour moi...
    Je viens de trouver mon erreur :

    If (IsNull(Me.[DateLiv]) Or Me.[DateLiv].Value = "") et non
    If (IsNull(Me.[DateLiv]) Or Me.[DateLiv].Value <> "")

    Par contre, après l'affichage de la boite de dialogue, la valeur saisie est conservée, alors que j'ai placé mon code sur l'évènement Avant Mise à jour. Cet évènement ne signifie-t'il pas "avant l'insertion dans la table de la nouvelle valeur saisie ?
    Si la valeur saisie n'est pas valide, comment conserver l'ancienne valeur, ou revenir à un champ vide si on était en création de commande ?

    Merci pour vos réponses

  3. #3
    Membre du Club Avatar de Amani Roland
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 42
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Place la ligne de code suivante juste après la Msgbox pour annuler l'évènement.

    Bonne suite!

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 34
    Points : 32
    Points
    32
    Par défaut
    Merci pour ta réponse. Malheureusement, cela ne fonctionne pas. Le champ conserve la dernière saisie.

    Je redonne mon code légèrement modifié :

    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
    Dim DateLivraison As String
        Dim DateJour As String
     
        DateJour = Date
     
        'Je contrôle que pour une commande en état C, la date de livraison est postérieure à la date du jour
        If Me.[Etat] = "C" And (Not IsNull(Me.[DateLiv]) Or Me.[DateLiv].Value <> "") Then
            DateLivraison = [DateLiv]
            If (DateLivraison <= DateJour) Then
                MsgBox "La date de livraison doit être postérieure à la date du jour", vbCritical
                Cancel = True
            Exit Sub
            End If
        Exit Sub
        End If
    Une autre idée ?

  5. #5
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 112
    Points : 5 237
    Points
    5 237
    Par défaut
    Bonjour,

    Personnellement je mets les controles AfterUpdate et si ça ne me plait pas je fais undo

  6. #6
    Expert éminent sénior

    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
    Points : 32 311
    Points
    32 311
    Par défaut
    Peut-être que quelque chose comme ceci serait plus propre que des Exit Sub dans des if vides

    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
    Private Sub DateLiv_BeforeUpdate(Cancel As Integer)
    On Error GoTo err
    If Nz(DateLiv.Value) <> "" Then
        If CDate(DateLiv) < Date Then
            err.Raise 15001
        End If
    End If
     
    fin:
        Exit Sub
    err:
        Select Case err.Number
            Case 13: MsgBox "La donnée saisie n'est pas une date"
            Case 15001: MsgBox "La date doit être supérieure à aujourd'hui"
            Case Else: MsgBox err.Number & ":" & err.Description
        End Select
        Me.DateLiv.Undo
        Cancel = True
        Resume fin
     
    End Sub

Discussions similaires

  1. [VBA-E] Saisie d'une date dans une Input Box
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/05/2006, 20h51
  2. [VBA-E]controle de saisie dans une cellule
    Par greg778 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/03/2006, 16h43
  3. Controle de saisie sur une liste déroulante
    Par antier dans le forum IHM
    Réponses: 3
    Dernier message: 07/12/2005, 05h42
  4. DBGrid personnalisé (controle de saisie numérique et date).
    Par abdelghani_k dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/04/2005, 18h50

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