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 :

[A-03] Formulaire : interdire saisie d'une valeur plus petite que la valeur courante


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 64
    Points
    64
    Par défaut [A-03] Formulaire : interdire saisie d'une valeur plus petite que la valeur courante
    Bonjour,

    J'ai un sous-formulaire tabulaire qui sert à calculer un prix. Il est pré-rempli avec des valeurs qui viennent d'une table, et je veux permettre de modifier le champ "Quantité" mais en interdisant de saisir une valeur inférieure à la valeur en cours (de la table, quoi...)

    "Bêtement", j'ai mis >=[Quantité] dans la ligne Valide Si, mais il ne se passe rien... ce qui me parait logique, à y réfléchir, vu que je crois savoir que la méthode "Valide si" se fait après la mise à jour... Sauf à partir dans des complications à base de variable, il doit bien exister un moyen simple, non?

    Merci de votre aide,

    Amicalement,

    JFB

    Access 2003

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour JFB,
    essaie avec l'événement Avant mise à jour

    Exemple : Une zone de texte TxtQté dans laquelle on ne peut saisir une quantité inférieure à [Quantité]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TxtQté_BeforeUpdate(Cancel As Integer)
     If Nz(TxtQté.Value,0) < [Quantité] Then Cancel=1
    End sub
     
    'Code supplémentaire pour n'autoriser que la saisie des chiffres sans décimales
    'Evénement Sur Touche Activée
    Private Sub TxtQté_KeyPress(KeyAscii As Integer)
     If KeyAscii<>8 And (KeyAscii<48 Or KeyAscii>57) Then KeyAscii=0
    End sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Bonjour Ilank, merci de t'occuper de mon cas...

    Mais ta solution ne fonctionne pas... En effet je veux comparer la valeur saisie dans un champ à la valeur du dit champ avant la saisie, pas avec un autre champ (ça, ça marche avec le ValidationRule).

    J'ai contourné le problème avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim oldqté As Integer
     
    Private Sub Qté_BeforeUpdate(Cancel As Integer)
    If Nz(Me.Qté, 0) < oldqté Then Cancel = True
    End Sub
     
    Private Sub Qté_Click()
    oldqté = Me.Qté
    End Sub
    Mais ce n'est pas très propre, et ne prend pas en compte le fait qu'on peut "arriver" sur ce champ par tabulation, du coup il faut gérer le GetFocus aussi... Bref ça marche mais c'est pas joli...

    Encore merci,

    JFB

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour fxbrg,
    essaie en conservant la quantité dans l'événement 'Sur Reception du focus'

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Qté_Gotfocus()
     Oldqté=[Qté]
    End sub

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Merci Ilank, c'est ce que je disais dans le post précédent, il faut que je gère le clic et le gotfocus...

    Ca marche, même si pas joli...

    Par contre le cancel=true empeche la validation de la valeur saisie, mais ne l'annule pas , il faut appuyer sur Esc pour revenir à la valeur d'origine. Est-ce bien normal?

    Amicalement,

    JFB

  6. #6
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    essaie en conservant la quantité dans l'événement 'Sur Reception du focus'
    Euh...

    La propriété OldValue ferait tout aussi bien l'affaire, non ? Pas besoin de gérer la réception du focus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.Qté.Value < Me.Qté.OldValue Then
    Domi2

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Wow, que n'es-tu pas passé plus tôt, Domi2!!??

    Mon code pas propre est devenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Qté_BeforeUpdate(Cancel As Integer)
    If Me.Qté < Me.Qté.OldValue Then
        Cancel = 1
        MsgBox "La valeur saisie ne peut être inférieure à " & Me.Qté.OldValue & " . Validez ce message puis Esc et recommencez"
    End If
    End Sub
    Merci beaucoup!!

    Amicalement,

    JFB

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/04/2012, 14h59
  2. Réponses: 2
    Dernier message: 01/02/2011, 13h10
  3. Réponses: 1
    Dernier message: 18/01/2011, 21h29
  4. Réponses: 0
    Dernier message: 07/04/2008, 17h56
  5. [JFrame] Création d'une fenetre plus grande que l'ecran
    Par thetoctoc dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/09/2004, 11h05

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