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 :

Critère pour valider un formulaire [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Critère pour valider un formulaire
    Bonjour,

    Je travaille actuellement sur la mise en place d'un gestion de stock sur access et je voudrais pouvoir vérouiller les sorties de stocks. Je m'explique : je voudrais pouvoir empêcher l'utilisateur de sortir une quantité supérieure à celle présente en stock.

    Je débute en vba et je dois bien avouer que là je suis perdu je ne vois même pas par où commencer...

    J'avais pensé à interdire les quantité < 0 dans la requete de calcul du stock, ou bien ouvrir cette requete à la validation du formulaire de sortie afin de comparer les valeurs....sans succès...

    Quel est selon vous le meilleur moyen de pouvoir y parvenir? (je ne demande pas forcément la réponse mais juste une piste pour partir).

    Merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2008
    Messages : 191
    Points : 200
    Points
    200
    Par défaut
    Bonjour,

    voici une piste qui pourrait être intéressante. Sur l'événement "avant mise à jour" du champ dans lequel l'utilisateur doit saisir la quantité à déduire, tu pourrais aller récupérer la valeur de tes stocks courants. Ensuite, il serait possible de comparer cette valeur avec la quantité que l'utilisateur désire retirer de l'inventaire afin de s'assurer que cela est possible. Si jamais la quantité que l'usager désire retirer est trop grande par rapport au stock, il sera possible d'annuler la mise à jour du champ et de lui signifier que cette quantité n'est pas logique.

    Il existe bien sûr plusieurs manières de procéder, mais je crois que cette stratégie pourrait répondre à tes besoins.

    Bonne chance avec la suite!

  3. #3
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 117
    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 117
    Points : 5 244
    Points
    5 244
    Par défaut
    Bonjour,

    Par exemple tu affiches ton stock en tableau

    Quand l'utilisateur double-clique sur une ligne tu lui demandes combien il en veut (inputbox...)
    S'il en demande plus que le stock tu lui expliques que c'est pas possible !!!


    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 Form_DblClick(Cancel As Integer)
    Dim s As String
    Dim Qte As Double
     
    s = InputBox("Combien de pièces ?", "Sortie manuelle de stock", 1)
    If val(s) > 0 Then Qte = Round(val(s), 2) Else Qte = 0
    If Qte >0 then 
      if   Qte > dispo Then
        MsgBox ":(((("
      Else
        dispo=dispo-Qte
        me.refresh
      end if
    end if
    end sub
    PS : j'ai développé une belle gestion de stock sous access que je vends pas cher ;-)

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Tout d'abord merci vos réponse à tous les 2.

    Nico je ne pourrais pas faire celà , car mes sorties se réalisent dans un formulaire de sortie, avec idSortie, dateS, idProjet (issu d'une table projet), dans lequel se trouve un sous formulaire ou l'on indique les produits à sortir à partir de la lecture d'un code-barre.

    En revanche al-bert je pense que ton idée convient, mais peut tu me dire quelle fonction permet d'aller récupérer le résultat de ma requete de calcul des stocks produits?

    Merci.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonjour,
    fonction regroupement de domaine :
    RechDom : dans le générateur d'expression ( contrôle formulaire...., QBE,)
    DLookup : dans le générateur de code (VBA)

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Bonjour LE VIEUX, merci pour la fonction et rebonjour les autres,

    J'ai testé le code suivant sur l'évènement Après Mise à Jour du champ ou l'on indique la quantité à sortir:

    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 QteSortie_AfterUpdate()
     
     Dim strMsg As String, strTitre As String
     Dim intStyle As Integer
     
    If Forms![FrmSortie]!LieuS = "Stock" Then
     
        a = DLookup("TotalStock", "ReqVolumeEtMontantTotal", "[PartNumber] =  & Me.[PartNumber]")
     
        If Me!QteSortie > a Then
     
            strMsg = "Erreur Quantité sortie supérieur au stock disponible."
            intStyle = vbOKOnly
            strTitre = "Erreur Quantité"
            MsgBox strMsg, intStyle, strTitre
     
        End If
     
    End If
     
    End Sub
    Sachant que FrmSortie est le formulaire dans lequel se trouve mon sous formulaire (SsFrmSortieDetail) ou je choisis les produits à sortir et ReqVolumeEtMontantTotal la requête dans laquelle je calcul mes stocks.

    Le problème est que le code s'arrête sur la ligne dlookup.

    Petite précision : - le champ PartNumber est un champ unique calculé à partir de plusieurs champs de la table produit et n'est donc pas la clé primaire.
    - l'erreur est erreur de syntaxe sur l'expression du critère

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    A priori une erreur sur le Dlookup, la chaine critère est mal constituée
    Voila la syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = DLookup("TotalStock", "ReqVolumeEtMontantTotal", "[PartNumber] ="  & Me.[PartNumber])
    D'autre part si tu veux pouvoir annuler la saisie de la quantité si elle depasse le stock, il vaut mieux travailler avec BeforeUpdate

    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 QteSortie_BeforeUpdate(Cancel As Integer)
     
     Dim strMsg As String, strTitre As String
     Dim intStyle As Integer
     
    If Forms![FrmSortie]!LieuS = "Stock" Then
     
        a = DLookup("TotalStock", "ReqVolumeEtMontantTotal", "[PartNumber] ="  & Me.[PartNumber])
     
        If Me!QteSortie > a Then
     
            strMsg = "Erreur Quantité sortie supérieur au stock disponible."
            intStyle = vbOKOnly
            strTitre = "Erreur Quantité"
            MsgBox strMsg, intStyle, strTitre
            Cancel=True
        End If
     
    End If
     
    End Sub
    --------------
    Frédéric
    http://www.access-developpement.com

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Bonjour fgiambelluco et merci

    J'ai rentré ton code sur l'élement BeforeUpdate avec simplement une petite modification ( & me![PartNumber] à la place de &me.[PartNumber] ) et je n'ai effectivement plus d'erreur de syntaxe, en revanche j'ai une nouvelle erreur

    "Impossible de trouver le champ 'PartNumber' auquel il est fait référence dans votre expression"

    Ce qui est bizarre car dans le sous-formulaire les produits à sortir sont identifiés par ce champ et il existe bien aussi dans la requete de calcul du stock.

    Celà pourrait-il être du au fait que le sous-formulaire est en mode feuille de données et que, par conséquent, on peut avoir plusieurs partnumber à sortir sur plusieurs lignes?

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    Il est possible que le champ soit dans la requète et pas dans le formulaire : dans ce cas, parfois, Access ne retrouve pas l'élément.
    Essaye la syntaxe suivante :


  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    J'avais déja fait cette modification, l'erreur venait de moi, un des champs avait une faute de frappe donc il ne risquait pas de le trouver effectivement.

    Maintenant tout fonctionne.

    Merci à tous, je passe en résolu.

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

Discussions similaires

  1. Bouton pour valider un formulaire
    Par Socki dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2009, 18h04
  2. Double Clic 2 critère pour ouvrir un formulaire
    Par popofpopof dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/05/2008, 11h34
  3. Aide pour valider un formulaire
    Par utzal dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2007, 10h44
  4. [WebForms]Comment utiliser la touche entrée pour valider un formulaire ?
    Par yonialhadeff dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 10/05/2006, 13h29
  5. Critère pour ouverture de formulaire
    Par LeBauw dans le forum Access
    Réponses: 12
    Dernier message: 19/09/2005, 13h14

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