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 :

Champ date de reference non fixe


Sujet :

IHM

  1. #1
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut Champ date de reference non fixe
    Bonjour,

    j'ai un état pour le quel je voudrais pouvoir compter le nombre de vacations entre deux dates, DATE_SIGNATURE_CONTRAT et DATE_MENU_FIN. Le problème est que le champ [DATE_SIGNATURE_CONTRAT] de la table T_EMPLOYES n'est pas fixe.

    De plus le comptage ne doit pas excéder un an.

    exemple si la DATE_SIGNATURE_CONTRAT est 05/08/2022, je dois ajouter un an à la date pour faire 05/08/2023 et l'année prochaine je devrais ajouter 2 ans !

    merci de votre aide

    cdlt
    A star is dead

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pas certain de comprendre ton besoin, à priori tu peux utiliser la fonction DateDiff qui te permet de faire la différence entre 2 dates selon l'unité de ton choix.
    https://support.microsoft.com/en-us/...c-e24fc238f85f
    Quelque chose comme DateDiff("aaaa"; [DATE_SIGNATURE_CONTRAT]; Date) va calculer le nombre d'années entre la date de ton contrat et la date courante.
    Attention les résultats de DateDiff ne sont pas toujours intuitifs ni ceux auxquels on s'attend donc fait des tests pour valider que cela donne ce dont tu as besoin.
    Il est possible que tu doives coder toi-même le calcul en utilisant les fonctions Year(), Month() et Day() pour décomposer ta date en morceaux.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour Marot

    merci pour ton aide je teste et j'essaye de revenir en m'expliquant un peu mieux mais cela va me permettre d'avancer

    cdlt
    A star is dead

  4. #4
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    re Bonjour,

    j'essaye de m'expliquer un peu mieux

    je joins une image de l'etat

    j'ai mis la réponse de marot mais en calculant le nombre de mois pour me faire une idée...


    en haut a gauche de l'état la date de signature du contrat est le 11/03/2023 il y a donc 12 mois donc je n'ai rien a ajouter sauf qu'a partir du 12/03 il faudra rajouter des jours car le calcul des vacations ne doit pas exceder un an

    en haut a droite pas de probleme la date de contrat n'a que 4 mois

    en bas à gauche la date de contrat est le 05/08/2022 il faut donc que je rajoute 12 mois et l'année prochaine 24 mois...
    en bas a droite il faut rajouter 2 mois puisque le contrat a 1 an et 2 mois,





    Nom : NBVACS.png
Affichages : 134
Taille : 11,0 Ko


    merci pour votre aide

    cdlt
    A star is dead

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bon je suis désolé mais je ne comprends toujours pas ce que tu veux faire :-(.

    Est-ce que tu veux afficher une durée sous la forme d'un nombre d'années et de mois ?
    Est-ce que tu veux ajouter une durée à une date ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour,


    merci pour ton aide oui je veux ajouter une durée a une date

    je voudrais un champ qui me calcule la date en référence a la date de signature du contrat, ce champ devra contenir une date qui n'excède pas 1 an par rapport a la date du jour

    exemple pour un contrat signé le 05/08/2022, il faudra rajouter 1 an soit 05/08/2023 , l'année prochaine pour la même date du jour et du mois il faudra rajouter 2 ans, toutes les dates de signature de contrat ne sont pas identiques.

    j'ai trouvé cette fonction que j'ai adapté, DSC1 correspond a la date de signature du contrat.
    avec cette fonction et cette sub il me calcul le nombre de jours mais maintenant je voudrais qu'il a joute ce nombre de jours à la date de signature du contrat si DSC2 est supérieur à 365 jours



    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
    Option Compare Database
    Function calculAge(dateAnniv As Variant, dateM As Variant) As Variant
    Dim nbmois As Integer
    Dim nbjours As Integer
    nbmois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))
     
     If Day(dateM) < Day(dateAnniv) Then
     nbjours = DateDiff("d", dateAnniv, DateSerial(Year(dateAnniv), Month(dateAnniv) + 1, 0)) + Day(dateM)
     Else
     nbjours = Day(dateM) - Day(dateAnniv)
     
     End If
     
    ' calculAge = LTrim(Str(nbmois \ 12)) & " ans " & LTrim(Str(nbmois Mod 12)) & " mois " & LTrim(Str(nbjours)) & " jours"
     calculAge = DateDiff("d", DSC1, Date)
     
    End Function
     
     
    Private Sub Form_Current()
    DSC2.Value = calculAge(DSC1.Value, Now)
     
    end sub
    a+
    A star is dead

  7. #7
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    après je coince, j'ai trouvé celà mais il y a multiples combinaisons sachant qu'un contrat a une durée max de 5 ans..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Current()
    DSC2.Value = calculAge(DSC1.Value, Now)
     
     
    If DSC2.Value < 365 Then
     
    DSC3.Value = DSC1.Value
     
    ElseIf DSC2.Value >= 365 < 730 Then
    DSC3.Value = DSC1.Value + 365
    End If
    A star is dead

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pour ajouter un an à une date il devrait suffire d'utiliser DateAdd(1,"aaaa", TaDate)https://support.microsoft.com/en-us/...4-61e8c57afc19
    Bon une autre possibilité est de découper la date en morceaux : année, mois et jour, d'ajouter un au morceau année et de recomposer la date utilisant DateSerial mais DateAdd marche TRÈS bien et gère les années bissextiles pour toi :-) donc si tu ajoutes 1 an 2024/02/29 tu obtiens 2025/02/28.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour,


    encore merci pour ton aide

    mais ce n'est pas fixe, si la date anniversaire est inférieure a 1 an par rapport a la date du jour on ajoute rien et si elle est égale ou supérieure a 1 an on ajoute 1an si elle est égale ou supérieure a 2 ans il faut rajouter 2 ans et ainsi de suite

    a+
    A star is dead

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ha, OK.

    Si on se limite aux années on peut peut-être faire un truc du genre :

    si le jour et le mois courant >= jour et mois de contrat donc au moins une année s'est écoulée
    alors calculer l'écart en années
    sinon calculer l'écart en années - 1

    En code ça donnerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iif(format(date(), "mm-dd")>=format([DateContrat], "mm-dd"), year(date())-year([DateContrat]), year(date())-year([DateContrat])-1))
    Il se peut qu'il y ai des parenthèses manquantes ou en trop à la fin.
    Mon Access buggue pour le moment, pas utilisable.
    Aussi si tu es dans un Access en français il faut utiliser le ; entre les paramètres et "mm-jj" à la place de "mm-dd".
    Le reste Access va traduire.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour Marot

    merci pour tout ce que tu fais

    j'ai mis cela dans l propriété source du champ mais celà me donne une erreur #nom ?

    DSC1 étant la date de signature du contrat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =iff(Format(Date();"mm-jj")>=Format([DSC1];"mm-jj");Année(Date())-Année([DSC1]);Année(Date())-Année([DSC1])-1)
    mon champ est formaté en date jj/mm/aaaa


    merci

    a+
    A star is dead

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    j'ai mis cela dans l propriété source du champ mais celà me donne une erreur #nom ?
    si tu as mis cette formule dans la propriété du champ DSC1, l'erreur #nom indiquant une référence circulaire, il est probable que l'erreur vienne de là
    Ou alors c'est parce que tu n'as pas corrigé l'erreur de marot_r: le nom de la fonction utilisée est iif (avec 2 i, pas 2 f)

    Et le mieux serait de mettre la formule (dans Access, on parle d'expression) dans la requête source.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour

    et merci de ton aide Tee Grandbois,

    j'ai rectifié dans le contrôle source ou dans la requête cela me donne 30/12/1899 comme date ?????


    merci

    Cdlt
    A star is dead

  14. #14
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    j'avais répondu seulement pour l'erreur #nom sans chercher plus loin, mais si on relit le dernier post de marot_r:
    Citation Envoyé par marot_r
    si le jour et le mois courant >= jour et mois de contrat donc au moins une année s'est écoulée
    alors calculer l'écart en années
    sinon calculer l'écart en années - 1
    on voit que le calcul donne un écart en années:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Année(Date())-Année([DSC1]);Année(Date())-Année([DSC1])-1
    donc une valeur entre 0 et 4 et pas une date, ce qui résout qu'une partie du problème énoncé.
    Je pense qu'il faudrait ajouter ce résultat à l'année de DSC1, ou quelque chose dans le genre tant que la date obtenue n'excède pas 1 an, si j'ai bien compris ...

    Pour y voir plus clair, si on on part de ce que tu as écrit ici:
    Citation Envoyé par lio62
    je voudrais un champ qui me calcule la date en référence a la date de signature du contrat, ce champ devra contenir une date qui n'excède pas 1 an par rapport a la date du jour
    est-ce bien ce qu'on doit obtenir comme dates de référence si on part de la date d'aujourd'hui (16/03/2024) ?

    11/03/2023 => 16/03/2023
    08/11/2023 => 08/11/2023
    05/08/2022 => 05/08/2023
    16/01/2023 => 16/03/2023
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  15. #15
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    Bonjour Tee Grandbois

    est-ce bien ce qu'on doit obtenir comme dates de référence si on part de la date d'aujourd'hui (16/03/2024) ?

    11/03/2023 => 16/03/2023
    08/11/2023 => 08/11/2023
    05/08/2022 => 05/08/2023
    16/01/2023 => 16/03/2023
    c'est exactement celà

    merci de ton aide

    cdlt
    A star is dead

  16. #16
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    alors je ne comprend pas pourquoi on n'a pas 16/03/2023 pour ces 2 cas :
    05/08/2022 => 05/08/2023 différence 19 mois
    16/01/2023 => 16/03/2023 différence 14 mois
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  17. #17
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    non autant pour moi je n'ai pas vu cette erreur désolé


    pour 16/01/2023 on doit avoir 16/01/2024 inférieure a 1 an a la date du jour (16/03/2024)



    et pour 05/08/2022 on doit bien avoir 05/08/2023 qui est inferieure a 1an a la date du jour (16/03/2024)

    merci
    A star is dead

  18. #18
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    je comprend pas plus ...
    les 2 premiers sont corrects ?
    11/03/2023 => 16/03/2023
    08/11/2023 => 08/11/2023

    si oui, pourquoi ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  19. #19
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 100
    Points
    100
    Par défaut
    bonjour


    pour hier 11/03/2023 =>16/03/2023 on ne rajoute que 5 jours pour arriver à une date inferieure ou égale à 1 an ; aujourd'hui (17/03/2024) il faudrait que la date soit 16/03/2024

    08/11/2023=>08/11/2023 est inférieure ou égale a 1 an a la date d'aujourd'hui donc c'est correct ca reste comme ca.

    Désolé pour mes explications pas toujours très compréhensibles

    et encore merci

    cdlt
    A star is dead

  20. #20
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    Citation Envoyé par lio62
    pour hier 11/03/2023 =>16/03/2023 on ne rajoute que 5 jours pour arriver à une date inferieure ou égale à 1 an ; aujourd'hui (17/03/2024) il faudrait que la date soit 16/03/2024
    je ne comprend pas pourquoi entre le 16/03/2024 et le 17/03/2024 la date du 11/03/2023 passerait de 16/03/2023 à 16/03/2024 : dans les 2 cas la date est inférieure à 1 an à la date du jour ???
    ou peut-être ai-je mal compris ta réponse ?
    ou bien c'est ça :
    Citation Envoyé par lio62
    Désolé pour mes explications pas toujours très compréhensibles
    merci de m'éclairer ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [2.x] Champ date non requis mais requis tout de même
    Par Symfo dans le forum Symfony
    Réponses: 2
    Dernier message: 18/08/2017, 08h26
  2. [2.x] Problème 'affichage d'erreur sur champ Date non valide
    Par charliejo dans le forum Symfony
    Réponses: 3
    Dernier message: 21/03/2015, 13h50
  3. [AC-2007] Sélection d'un champ date "non null" et d'une valeur "MAX"
    Par saintsat dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 15/04/2013, 10h42
  4. Réponses: 0
    Dernier message: 25/01/2008, 10h09
  5. [Validator] champ date non obligatoire
    Par anjiniaina dans le forum Struts 1
    Réponses: 6
    Dernier message: 23/03/2007, 09h50

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