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

Access Discussion :

Calcul d'un nb de jours sur un état


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut Calcul d'un nb de jours sur un état
    Bonjour,

    Je sais que le sujet est déjà entammé avec le message de beurnoir mais comme je ne suis pas exactement dans la même situation, je prefère ouvrir un nouveau message. En effet, cela à l'air d'être déjà assez compliqué comme ça et je ne pense pas que faire 2 sujets sur un seul post soit la meilleur solution.

    Ma situation:

    1 table stock où j'ai une date d'entrée (DATENTREE) et une date de sortie (DATESORTIE) pour chaque enregistrement.
    1 formulaire où l'utilisateur rentre les limites d'une période (DATEDEBUT et DATEFIN)
    1 état sur lequel je veux afficher le compte du nombre de jours NJ où une palette est en stock

    Là où j'en suis:

    J'ai réalisé une requête qui liste toutes les palettes entre les 2 dates de la période.
    J'ai un sous-état sur lequel il y a les codes produit et libellés produits de chaque palette. Ce sous-état est basé sur la requête précedente donc seul les palettes interessantes sont à l'écran.
    J'ai un algorithme de base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Si DATEDEBUT>DATENTREE et DATESORTIE="" alors NJ(nb de jours càd ce que je cherche à calculer)=DATEFIN-DATEDEBUT+1
    Sinon Si ...
    Je ne vous le mets pas en entier car ce n'est pas à vous de me faire tous le travail.

    Mon problème:

    Où est-ce que je suis sensé mettre cet algorithme?

    Merci à vous de m'aider,
    Mr White

  2. #2
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Voilà ce que j'ai pensé faire.

    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
    Private Sub Commande16_Click()
        If &#91;Stock&#93;!&#91;DATENTREE&#93; < &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93; And &#91;Stock&#93;!&#91;DATESORTIE&#93; = "" Then
            &#91;Etats&#93;!&#91;Facture_PROFORMA&#93;!&#91;PROFORMA_Terme_fixe sous-état&#93;.&#91;Etat&#93;!&#91;Texte10&#93; = DateDiff&#40;"d", &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateFin&#93;, &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93;&#41;
            Else
                If &#91;Stock&#93;!&#91;DATENTREE&#93; < &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93; And &#91;Stock&#93;!&#91;DATESORTIE&#93; < &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateFin&#93; Then
                    &#91;Etats&#93;!&#91;Facture_PROFORMA&#93;!&#91;PROFORMA_Terme_fixe sous-état&#93;.&#91;Etat&#93;!&#91;Texte10&#93; = DateDiff&#40;"d", &#91;Stock&#93;!&#91;DATESORTIE&#93;, &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93;&#41;
                    Else
                        If &#91;Stock&#93;!&#91;DATENTREE&#93; > &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93; And &#91;Stock&#93;!&#91;DATESORTIE&#93; = "" Then
                            &#91;Etats&#93;!&#91;Facture_PROFORMA&#93;!&#91;PROFORMA_Terme_fixe sous-état&#93;.&#91;Etat&#93;!&#91;Texte10&#93; = DateDiff&#40;"d", &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateFin&#93;, &#91;Stock&#93;!&#91;DATENTREE&#93;&#41;
                            Else
                                If &#91;Stock&#93;!&#91;DATENTREE&#93; > &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateDebut&#93; And &#91;Stock&#93;!&#91;DATESORTIE&#93; < &#91;Formulaires&#93;!&#91;PROFORMA&#93;!&#91;DateFin&#93; Then
                                    &#91;Etats&#93;!&#91;Facture_PROFORMA&#93;!&#91;PROFORMA_Terme_fixe sous-état&#93;.&#91;Etat&#93;!&#91;Texte10&#93; = DateDiff&#40;"d", &#91;Stock&#93;!&#91;DATESORTIE&#93;, &#91;Stock&#93;!&#91;DATENTREE&#93;&#41;
                                End If
                        End If
                End If
        End If
     
    End Sub
    Je ne l'ai pas encore essayé. Je pensais le mettre sur le click du bouton OK de mon formulaire. A votre avis c'est bon? Pour moi, c'est vraiment trop de la bricole donc je me dis qu'il doit y avoir quelque chose de plus "standard", qui ressemble plus à une procédure...

    Si vous avez la moindre idée, un lien ou quoi que ce soit, il ne faut surtout pas hésiter à me les envoyer.

    Merci,
    Mr White

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    alors là c'est officiel, ce code ne marche pas.
    Je crois que je vais plutôt essayer de prendre les conditions 1 par 1 et les rajouter quand la précédente marchera.


    Mr White

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    normal tu utilises un code formulaire pour modifier des données Etat ...

    Il faut travailler au niveau de la donnée (TABLE).

    Ton algo de stock peut devenir une fonction qui renverra une valeur ou plusieurs valeurs, mais en aucun cas modifier des valeurs de contrôles d'états.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  5. #5
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Donc si je comprend bien, ce qu'il faudrait que je fasse c'est rajouter un champs "Nb de jours" dans ma table Stock et ensuite je crée une fonction qui calcul la valeur de ce champs?

    Si c'est ça, OK. Mais j'ai toujours mon problème d'emplacement. Où dois-je mettre cette fonction.
    Sur click de mon bouton OK? C'est pas mal car de toutes façon c'est qu'à ce moment là que l'on peut calculer le nombre de jours (car c'est sur ce formulaire que je donne les DateDébut et DateFin). Non?

    Si c'est pas ça que t'as voulu me dire, je crois qu'il va falloir m'expliquer ça un peu plus simplement si tu le veut bien.

    Merci de l'aide,
    Mr White

  6. #6
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    quel est l'événement métier qui déclenche ce calcul ?
    qu'est-ce qui fait qu'un collaborateur est amené à avoir besoin de cette info ?
    quelles sont les infos nécessaires à ce calcul ?
    quelle est la périodicité du calcul ?
    qui est amené à renseigner les infos / qui a besoin du résultat ?

    C'est ce genre de questions qu'il faut se poser avant de se poser la question technique.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  7. #7
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Dans ce cas: explication.

    Je réalise une BdD qui va gérer un entrepôt. L'étape à laquel je me trouve est la suivante.
    Prenons un exemple: Pendant le mois d'octobre 2005 j'ai fais rentrer et sortir un certain nombre de palettes. Ces palettes sont restées plus ou moins longtemps dans mon entrepôt. D'ailleur, certaines sont rentrées après le 01/10/05, d'autres sont encore en stock, ... (tous ces cas sont traités dans mon algorithme).
    Aujourd'hui on est le 27/10/2005 et je désire réaliser une facture PROFORMA sur un de mes clients càd que je désire faire un listing complet de ce que je vais lui facturer. Dans cette facture il y a le prix qu'il me doit pour avoir rentré ses palettes dans mon entrepôt, le prix qu'il me doit pour avoir sortit ses palettes de mon entrepôt, ... et surtout le prix qu'il me doit pour le temps que ses palettes ont passés dans mon entreprôt (c'est ça que gère l'algorithme).
    J'ai donc fait un formulaire qu'un utilisateur X renseignera afin d'éditer directement sa PROFORMA. Je lui demande le nom du client, la date de début de la période (dans l'exmple le 01/10/05) et la date de fin de période (aujourd'hui donc le 27/10/05). Mon utilisateur click alors sur un bouton OK qui lui montre l'état qu'il imprime par la suite.

    Voilà comment doit marcher cette partie de ma BdD...et donc voilà pourquoi je me dis que lancer le calcul sur le bouton OK est le meilleur moment. Mais comment exactement , là je n'en n'ai pas la moindre idée.

    J'espère vraiment avoit été assez clair,
    Mr White

  8. #8
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Voilà ce que je viens de faire AAAAAHHHHH... et qui ne marche pas OOOOOOHHHHHH

    Au lieu de faire toutes mes conditions en 1 seule fois, j'ai essayé de les décomposer en 4 requêtes de Mise-à-jour. Ce que j'ai donc fait:
    1°) requête MAJ
    2°) Critères: DATENTREE<[Formulaires]![PROFORMA]![DateDebut] et DATSORTIE Est Null
    3°) Mise à jour: [Formulaires]![PROFORMA]![DateFin]-[Formulaires]![PROFORMA]![DateDebut]+1

    Réponse Access: "Type de données incompatibles dans l'expression du critère"
    Là moi pas compris. Je lui donne 2 dates à comparer et il me dit que c'est 2 ttypes de données incompatibles ... je reste perplexe. Je commence à croire qu'Access est un logiciel dont le seul but est de me rendre marteau

    Mr Whilklirnjte (ça commence)

  9. #9
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    Je cros que mon problème viens du fait que dans ma requête, Access n'arrive pas à soustraire 2 dates. Est-ce qu'un âme charitable saura me dire comment faire pour qu'il réussisse?

    Mr White

    PS: les 2 dates sont les dates du formulaire qui sont écritent avec un masque de saisie

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Normalement deux dates (de type DATE) peuvent parfaitement se soustraire, la valeur obtenue est exprimée en jours, les décimales représentent les heures/minutes/secondes
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  11. #11
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    je viens de faire un test en faisant la soustraction de 2 dates appartenant à une table. Résultat: ça marche. Je commence donc à croire qu'Access ne peut pas soustraire 2 dates d'un formulaire. Ou alors y a-t-il une méthode précise à appliquer?

    Mr White

  12. #12
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tout dépend dans quel est le type de données contenu dans ton formulaire, essaie de convertir en date ... CDate()
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  13. #13
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    J'ai simplifier la question en réalisant une copie de mes champs de mon formuliare dans des champs de la ma table. Résultat: ça marche.
    Il y a surement plus pro mais pour le moment je vais faire avec ça.

    Merci de l'aide,
    Mr White

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

Discussions similaires

  1. [AC-2010] Calcul nombre de jour sur deux années
    Par jclm230759 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/12/2014, 09h03
  2. [XL-2010] Calcul nombre de jours sur un intervalle
    Par Flow5663 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2013, 04h46
  3. Réponses: 4
    Dernier message: 11/07/2007, 16h23
  4. Reculer de x jours sur une date.
    Par SunSyS dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/07/2006, 10h59

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