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 :

Calcul avec des contrôles vides


Sujet :

IHM

  1. #1
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut Calcul avec des contrôles vides
    Bonjour,

    Je cherche à faire le calcul du contenu d'un controle QuantIn - le contenu d'un controle QuantOut.
    Les quantités sont obtenues à l'aide de requete et d'un recordset.
    Lorsque les 2 requetes ont un résultat, une valeur est stockée dans chaque controle Quant... et le calcul QuantIn-QuantOut fonctionne.
    Mais impossible de récupérer un résultat quand l'une des 2 requetes ne renvoie rien.

    L'algo que je cherche est du style :
    Si Me.QuantIn a une valeur et Me.QuantOut a une valeur alors Me.total = Me.QuantIn-Me.QuantOut (ca, ca fonctionne)
    Sinon si Me.QuantOut n'a pas de valeur alors Me.total = Me.QuantIn
    Sinon Me.total = QuantOut

    J'ai essayé le code avec :
    - ElseIf IsNull(Me.QuantOut)
    - ElseIf IsEmpty(Me.QuantOut)
    - ElseIf Me.QuantOut.Value = ""
    - ElseIf len(Me.QuantOut) = 0 (+- trim !!!)

    Mais rien ne va !
    Pouvez-vous m'aider ?

  2. #2
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    As-tu essayé avec la fonction Nz ? Quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.total = Nz(Me.QuantIn,0)-Nz(Me.QuantOut,0)
    Le tout est de savoir si ton résultat peut être négatif. Si ce n'est pas le cas, il faut rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.total = ent(Nz(Me.QuantIn,0)-Nz(Me.QuantOut,0))
    A tester...

  3. #3
    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
    bonsoir,
    connais pas bien ta base et où atterissent tes valeurs mais exemple sur des zones de texte d'un formulaire :
    ça pourrait faire ça sur réception focus de la zone "total" - à adapter et améliorer....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub total_GotFocus()
     
    Me.total.Value = Switch(Me.QuantIn.Value = "", Me.QuantOut.Value, Me.QuantOut.Value = "", Me.QuantIn.Value)
    If IsNull(Me.total) Then
    Me.total = Me.QuantIn - Me.QuantOut
    End If
     
     
    End Sub
    a+

  4. #4
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Merci pour vos réponses.
    Malheureusement, ca ne donne toujours rien !

    Voila plus d'explication :
    Quand mes requetes renvoient un résultat, pas de probleme. Le calcul se fait parfaitement.
    Mais quand j'ai un résultat de requete vide, comme ca :



    Le contenu des controles ressemblent à ca :



    J'ai un résultat pour QuantIn, rien pour QuantOut, et que ce soit avec ce que j'ai mis dans mon 1er post ou avec ce que vous m'avez proposé, la quantité en stock est toujours vide. Il faudrait qu'elle soit égale à la QuantIn...

  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,
    le code que je t'ai proposé fonctionne (controlé) mais dans un contexte ou tous les contrôles sont sur le même formulaire - donc structure la plus simple.
    pour l'adapter à ton contexte il faut qu'on en connaisse un peu plus sur la structure de ta base.....
    si tu peux poster une copie de l'essentiel de celle-ci on pourrait peut être mieux t'aider ?
    a+

  6. #6
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Tous les controles sont bien sur le meme formulaire. J'ai juste mis les QuantIn et Out dans le pied de formulaire pour les cacher par la suite.

    Bout de code :
    Code sql : 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
    'Affectation de la BDD courante à DB
    Set DB = CurrentDb
     
    'Requete de calcul de la Qté In :
    sSQL = "SELECT T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond], SUM(T1.[quantité]) as QuantIn" & _
           " FROM STOCK_STERCOND AS T1 WHERE T1.[entrée / sortie]<>'Sortie' AND T1.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
           " AND T1.[référence] = '" & Me.[Référence] & "' AND T1.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
           " GROUP BY T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond]"
     
    'Execution de la requete
    Set rs = DB.OpenRecordset(sSQL)
    Me.QuantIn.Value = rs.Fields(3)
     
    'Requete de calcul de la Qté Out :
    Set DB1 = CurrentDb
    sSQL1 = "SELECT T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond], SUM(T2.[quantité]) as QuantOut" & _
            " FROM STOCK_STERCOND AS T2 WHERE T2.[entrée / sortie]='Sortie' AND T2.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
            " AND T2.[référence] = '" & Me.[Référence] & "' AND T2.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
            " GROUP BY T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond]"
     
    Set rs1 = DB1.OpenRecordset(sSQL1)
    Me.QuantOut.Value = rs1.Fields(3)
     
    Me.Quantité_dispo = Nz(Me.QuantIn, 0) - Nz(Me.QuantOut, 0)
     
    rs.Close
    rs1.Close

  7. #7
    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
    re,
    j'ai inséré ma proposition à partir de :
    'insert code

    à ton code, que je ne peux vérifier, teste en mode debug pour voir ce que cela donne,

    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
    'Affectation de la BDD courante à DB
    Set DB = CurrentDb
     
    'Requete de calcul de la Qté IN :
    sSQL = "SELECT T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond], SUM(T1.[quantité]) as QuantIn" & _
           " FROM STOCK_STERCOND AS T1 WHERE T1.[entrée / sortie]<>'Sortie' AND T1.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
           " AND T1.[référence] = '" & Me.[Référence] & "' AND T1.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
           " GROUP BY T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond]"
     
    'Execution de la requete
    Set rs = DB.OpenRecordset(sSQL)
    Me.QuantIn.Value = rs.Fields(3)
     
    'Requete de calcul de la Qté Out :
    SET DB1 = CurrentDb
    sSQL1 = "SELECT T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond], SUM(T2.[quantité]) as QuantOut" & _
            " FROM STOCK_STERCOND AS T2 WHERE T2.[entrée / sortie]='Sortie' AND T2.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
            " AND T2.[référence] = '" & Me.[Référence] & "' AND T2.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
            " GROUP BY T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond]"
     
    SET rs1 = DB1.OpenRecordset(sSQL1)
    Me.QuantOut.Value = rs1.FIELDS(3)
     
     
    ‘insert code
     
    Me. Quantité_dispo.Value = Switch(Me.QuantIn.Value = "", Me.QuantOut.Value, Me.QuantOut.Value = "", Me.QuantIn.Value)
    If IsNull(Me. Quantité_dispo) Then
    Me. Quantité_dispo = Me.QuantIn - Me.QuantOut
    End If
     
     
     
     
     
    rs.Close
    rs1.Close

  8. #8
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Merci mais ça ne marche toujours pas.
    Mes requetes fonctionnent bien (comme sur le screen de formulaire posté précédemment), avec une valeur dans QuantIn et rien dans QuantOut.
    Dans cette situation, il faudrait que la valeur pour le stock soit la meme que celle dans QuantIn. Pour le moment, la valeur de stock est vide...

  9. #9
    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
    bonsoir,
    désolé mais je ne voit pas, voir quelles sont les valeurs affichées dans le débogage j'insiste car beaucoup de problèmes sont découvert à cette occasion, quels format des champs au départ et les valeurs au fur a mesure du développement du programme.
    je suppose que tu ne peux pas poster un extrait épuré de ta base, sinon on pourrait mieux voir,
    si une idée me vient où si une bonne âme plus compétente, passe par là
    à plus pour une bonne nouvelle j'espère pour toi.
    bon courage

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,

    Je n'ai pas suivi intégralement... Juste des pistes :

    Puisqu'on a sur le même formulaire QuantIn et QuantOut pourquoi ne pas faire le calcul dans le champ du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Quantite en Stock = Nz(Me.QuantIn, 0) - Nz(Me.QuantOut, 0)
    Si QuantIn et QuantOut provenaient chacun d'un S/form différent glissé dans le pied du formulaire, on aurait 2 champs pour chercher l'information de S/form<-->Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuantIn =[sfrm_In].[Formulaire]![QuantIn]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuantOut =sfrm_Out.Formulaire!QuantOut
    Et dans ce cas Quantite en Stock -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =VraiFaux(IsError([QuantIn]);0;[QuantIn])
    -VraiFaux(IsError([QuantOut]);0;[QuantOut])
    Cordialement.

  11. #11
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    J'ai une piste mais je ne sais pas comment régler le probleme.

    Ce qui se passe, c'est que lorsqu'une de mes 2 requetes pour récupérer QuantIn ou QuantOut ne donne pas de resultat, elles ne renvoient pas de champ vide ou valeur nulle mais renvoie "aucun enregistrement en cours". Dans ce cas, QuantIn ou QuantOut est donc inexistant.

    Comment spécifier que lorsque le resultat de requete ne renvoie aucun enregistrement, il faut attribuer a QuantIn ou QuantOut la valeur 0 (zéro) ?

  12. #12
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Points : 2 412
    Points
    2 412
    Par défaut
    Ca y est ! Ca fonctionne !!!

    Voila la solution :
    Lorsque la requete ne renvoie aucun enregistrement, EOF renvoie Vrai.
    Donc si on reprend le bout de code plus haut, ca donne :

    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
    'Affectation de la BDD courante à DB
    Set DB = CurrentDb
     
    'Requete de calcul de la Qté In :
    sSQL = "SELECT T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond], SUM(T1.[quantité]) as QuantIn" & _
           " FROM STOCK_STERCOND AS T1 WHERE T1.[entrée / sortie]<>'Sortie' AND T1.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
           " AND T1.[référence] = '" & Me.[Référence] & "' AND T1.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
           " GROUP BY T1.[numéro de lot produit], T1.[référence], T1.[numéro de lot stercond]"
     
    'Execution de la requete
    Set rs = DB.OpenRecordset(sSQL)
    If rs.EOF Then
        Me.QuantIn.Value = 0
    Else
        Me.QuantIn.Value = rs.Fields(3)
    End If
     
    'Requete de calcul de la Qté Out :
    Set DB1 = CurrentDb
    sSQL1 = "SELECT T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond], SUM(T2.[quantité])+0 as QuantOut" & _
            " FROM STOCK_STERCOND AS T2 WHERE T2.[entrée / sortie]='Sortie' AND T2.[numéro de lot produit] = '" & Me.[numéro de lot produit] & "'" & _
            " AND T2.[référence] = '" & Me.[Référence] & "' AND T2.[numéro de lot stercond] = '" & Me.[numéro de lot stercond] & "'" & _
            " GROUP BY T2.[numéro de lot produit], T2.[référence], T2.[numéro de lot stercond]"
     
    Set rs1 = DB1.OpenRecordset(sSQL1)
    If rs1.EOF Then
        Me.QuantOut.Value = 0
    Else
        Me.QuantOut.Value = rs1.Fields(3)
    End If
     
    'Calcul de la Quantité en stock
    Me.Quant_stock = Me.QuantIn - Me.QuantOut
     
    rs.Close
    rs1.Close
    J'allais oublier... Merci à tous !

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

Discussions similaires

  1. Etat - problème avec des contrôles vides
    Par ver_for dans le forum IHM
    Réponses: 2
    Dernier message: 17/09/2008, 15h55
  2. Faire une boucle avec des variables vides ?
    Par byloute dans le forum Linux
    Réponses: 5
    Dernier message: 23/02/2006, 09h33
  3. Calcul avec des flottants
    Par tarzent dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/12/2005, 11h20
  4. [SELECT] Faire un select avec des champs vides
    Par MinsK dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/08/2005, 00h05
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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