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 de la durée entre deux dates


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut Calcul de la durée entre deux dates
    Bonjour,

    Etant débutant sous Access, je suis totalement bloqué, je souhaite calculer la durée entre deux date sous VBA, je sais pas comment procéder.
    Par exemple j'ai les deux date suivantes :
    - 15/08/2008
    - 22/04/2009
    Sachant que le calcul sera à la base de 30 jour, aidez moi SVP.

    Merci beaucoup d'avance.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Petit exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function DDate()
    Dim D1, D2 As Date
    Dim ecart As Long
    D1 = #10/24/2008#
    MsgBox (D1)
    D2 = #3/5/2008#
    MsgBox (D2)
    ecart = D1 - D2
    MsgBox (ecart)
    End Function

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 72
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Rechercher dans VBA excel ou Access la fonction

  4. #4
    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,

    etoileetoile t'a donné une solution, mais je ne comprends pas
    Sachant que le calcul sera à la base de 30 jours
    Peux-tu nous expliquer ?

    ACEMACEM : attention, lorsque tu notes
    Dim D1, D2 As Date
    D1 est déclaré comme Variant et non comme Date
    Gabout

  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
    salut Gabout et bon WE tous le monde,
    peut être que notre ami parab fait allusion à une fonction qui existe sur Excel et pas sur Access où tout au moins je ne l'ai pas encore trouvée.
    un DateDiff avec base 360 - qui s'appelle JOURS360 dans excel.

    si c'est le cas sinon simplement pour une fois de plus une petite révision pour utiliser des fonctions excel dans access (c'est bien sur dans la faq etc.....)
    si l'on a excel sur le poste bien sur et si on pense à la ref.
    une id de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    On pense a mettre dans les références "Microsoft Excel X.0 Object Library"
     
    Function J360()
    d1 = #6/30/2008#
    d2 = #9/1/2008#
      Dim MonExcel As Excel.Application
      j = Excel.WorksheetFunction.Days360(d1, d2)
      Debug.Print j
     
      Set MonExcel = Nothing
    End Function
    cela donne 61
    alors que DateDiff donne 63 - Normal il y a 2 mois qui on 31 j !!
    ça dépend bien sur de savoir ce que l'on veut...

    à +

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut
    Je ne comprend pas exactement la réponse, comment je peux utiliser cette fonction sous VBA/Access, j'ai ajouté la référence "Microsoft Excel 11.0 Object Library", mais je ne sais pas comment exécuter cette fonction, pourras tu m'expliquer plus en détail, vu que je suis débutant.
    Merci d'avance.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut
    Erreur d'exécution '1004'
    Impossible de lire la propriété Days360 de la classe WorkSheetFunction.

    J'ai cette erreur à chaque fois...

  8. #8
    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,
    1) si je comprend bien c'est bien la fonction qu'il te faut soit base 360

    2) tu dois appeler cette fonction, en l'adaptant bien sur à la structure de ta base.

    dis nous en un peu plus sur celle-ci :
    tables, relations.
    où sont tes dates début et date de fin :
    ex : "sur un formulaire - attaché ou indépendant de tes tables" -
    qu'est-ce que tu vas faire de l'info -
    la fonction tu peux l'appeler - d'un formulaire, d'une requête etc.
    précises on va t'aider.
    a +

    je suis intervenu avant ton dernier post -
    mets nous ton code entier en post....
    si tu as bien mis la référence cela devrait marcher "ça marche chez moi"

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut
    Les dates début et fin sont dans un formulaire indépendant de mes tables, mais qui sont recupérés avec des requêtes de selection.
    Je veux calculer la durée entre les deux dates pour la multiplier à un montant mensuelle, sachant que la base de calcul est sur 30 jour, par exemple si j'ai une date de début "12/10/2008", je dois calculer du 12 au 30 et rajouter les mois suivants, puis pour une date de fin "22/09/2009", ajouter du 22 au 30 au calcul.
    Est ce que cette fonction permets d'établir ce calcul ?

    Je teste dans une formulaire avec deux zones de texte, Mon code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Commande4_Click()
        J360.Execute
    End Function
     
    Function J360()
        Dim MonExcel As Excel.Application
        j = Excel.WorksheetFunction.Days360(Texte0.Value, Texte1.Value)
        Debug.Print j
     
        Set MonExcel = Nothing
    End Function
    Merci beaucoup d'avance.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 72
    Points : 80
    Points
    80
    Par défaut
    Aide VBA sur access 2000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim TheDate As Date    ' Déclare les variables.
    Dim Msg
    TheDate = InputBox("Entrez une date")
    Msg = "Jours à compter d'aujourd'hui: " & DateDiff("j", Now, TheDate)
    MsgBox Msg
    Syntaxe

    DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

    La syntaxe de la fonction DateDiff comprend les arguments nommés suivants :

    Élément Description
    interval Expression de chaîne correspondant à l'intervalle de temps utilisé pour calculer la différence entre date1 et date2.
    date1, date2 De type Variant (Date), représentent les deux dates utilisées dans le calcul.
    firstdayofweek Facultatif. Constante précisant le premier jour de la semaine. Si aucune valeur n'est précisée, la valeur par défaut est dimanche.
    Firstweekofyear Facultatif. Constante précisant la première semaine de l'année. Si aucune valeur n'est précisée, la première semaine est par défaut celle du 1er janvier.



    Valeurs

    L'argument interval peut prendre les valeurs suivantes :

    Valeur Description
    yyyy Année
    q Trimestre
    m Mois
    y Jour de l'année
    d Jour
    w Jour de la semaine
    ww Semaine
    h Heure
    n Minute
    s Seconde



    L'argument firstdayofweek peut prendre les valeurs suivantes :

    Constante Valeur Description
    vbUseSystem 0 Utilise le paramètre de l'API NLS.
    vbSunday 1 Dimanche (valeur par défaut)
    vbMonday 2 Lundi
    vbTuesday 3 Mardi
    vbWednesday 4 Mercredi
    vbThursday 5 Jeudi
    vbFriday 6 Vendredi
    vbSaturday 7 Samedi



    Constante Valeur Description
    vbUseSystem 0 Utilise le paramètre de l'API NLS.
    vbFirstJan1 1 Commencer par la semaine du 1er janvier (valeur par défaut).
    vbFirstFourDays 2 Commencer par la première semaine comportant au moins quatre jours dans l'année nouvelle.
    vbFirstFullWeek 3 Commencer par la première semaine complète de l'année.



    Remarques

    Utilisez la fonction DateDiff pour déterminer le nombre d'intervalles de temps spécifiés entre deux dates. Par exemple, utilisez DateDiff pour calculer le nombre de jours entre deux dates ou le nombre de semaines entre la date d'aujourd'hui et la fin de l'année.

    Pour calculer le nombre de jours entre date1 et date2, vous pouvez utiliser les valeurs Jour de l'année ("y") ou Jour ("d"). Si l'argument interval est Jour de la semaine ("w"), DateDiff renvoie le nombre de semaines entre les deux dates. Si date1 tombe un lundi, DateDiff calcule le nombre de lundi jusqu'à date2. La valeur date2 est prise en compte, mais pas la valeur date1. Si l'argument interval est Semaine ("ww"), la fonction DateDiff renvoie le nombre de semaines calendaires entre les deux dates. Le nombre de dimanches entre date1 et date2 est calculé. DateDiff prend en compte date2 si cette date tombe un dimanche, mais pas date1, même s'il s'agit également d'un dimanche.

    Si date1 est postérieure à date2, la fonction DateDiff renvoie un nombre négatif.

    L'argument firstdayofweek a une incidence sur les calculs qui utilisent les symboles d'intervalle "w" et "ww".

    Si date1 ou date2 est un littéral date, l'année spécifiée devient un élément permanent de la date. Toutefois, si date1 ou date2 apparaît entre guillemets (" ") et si vous n'indiquez pas l'année, l'année en cours est insérée dans le code chaque fois que l'expression date1 ou date2 est évaluée. Vous pouvez ainsi écrire du code qui sera réutilisable au fil des années.

    Lors de la comparaison des dates 31 décembre et 1er janvier de l'année suivante, DateDiff avec la valeur Année ("yyyy") renvoie 1, même si la différence est seulement d'un jour.

    Note Pour date1 et date2, si la valeur de la propriété Calendar est Grégorien, la date fournie par l'utilisateur doit être du même type. S'il s'agit d'un calendrier Hijri, la date doit prendre la valeur Hijri.

  11. #11
    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,

    pour etoileetoile - la fonction DateDiff ne travaille pas sur la base de 30 Jours par mois à ma connaissance.

    pour parab -
    effectivement quelques problèmes avec le code : voit ci-joint une base qui reprend la function
    sur after update de la date2
    la fonction adatpté par l'appel par un bouton "ton exemple"
    une requête qui utilise la même fonction

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut
    Merci LE VIEUX, mais mon tuteur n'est pas satisfait, il trouve que ce n'est pas très précis , il m'a dis de rjouter d'autres calculs comme ceci :

    Pour une date de début "12/10/2008", tu calcules du 12 au 30 et tu rajoutes les mois suivants avec cette fonction "D360", puis pour une date de fin "22/09/2009", ajoutes du 22 au 30 au calcul pour que cela soit très précis.

    Aurais-tu stp une autre procédure pour effectuer ce calcul ?

  13. #13
    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,
    tuteur pas satisfait, on va essayer d'améliorer - la précision en la matière peut jouer d'après mes essais sur un dernier mois à 31 jours - on va pas mettre la DLL de microsoft et le tuteur en bis bis... il est classique dans les intervalles de date d'avoir quelques différences selon que le compte le 1 ou le dernier jour.
    alors je te reposte la base sur laquelle tu pourras trouver divers codes qui fonctionnent chacun avec cet écart d'un jour.
    le plus simplifié ne fait pas appel à la DLL d'excel - voilà les 2 versions pour ceux qui ne veulent pas ouvrir la base :

    donne l'équivalent DE JOURS360 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function D360ter(D1, D2)
    NbMois = DateDiff("m", D1, D2) + 1
    NBEnt = NbMois - 2
    JMoisDeb = 30 - DatePart("d", D1)
    JMoisFin = DatePart("d", D2)
    NbJour = JMoisDeb + JMoisFin + (NBEnt * 30)
    D360ter = NbJour
     
    End Function
    ou peut être ce que veux le tut soit le dernier mois n'a jamais 31 jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function D360Quater(D1, D2)
    NbMois = DateDiff("m", D1, D2) + 1
    NBEnt = NbMois - 2
    JMoisDeb = 30 - DatePart("d", D1)
    JMoisFin = IIf(DatePart("d", D2) = 31, 30, (DatePart("d", D2)))
    NbJour = JMoisDeb + JMoisFin + (NBEnt * 30)
    D360Quater = NbJour
    End Function
    où pour les amateurs de plus de code :
    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
    Function D360bis(D1, D2)
    Dim DT As Date
    DT = D1
    NbMois = DateDiff("m", D1, D2) + 1
    For i = 1 To NbMois
     If DT = D1 Then
     Nbj = 30 - DatePart("d", DT)
     ElseIf i = NbMois Then
     Nbj = IIf(DatePart("d", D2) = 31, 30, (DatePart("d", D2)))
     
     
     Else
     Nbj = 30
      End If
     
      NbjT = NbjT + Nbj
     DT = DateAdd("m", 1, DT)
    Debug.Print NbjT
     
    Next
     D360bis = NbjT
    End Function
    je n'ai pas voulu chercher avec pour chaque mois l'application de JOURS360 car là on friserait "la machine à réinventer le fil a couper le beurre"

    on peut peut être encore trouver plus simple....
    j'espère que tu trouveras ton bonheur
    à+
    bon courage et bonjour au tuto

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup LE VIEUX, j'ai fait des tests et j'ai trouvé que la DLL Excel fournit le même résultat que la fonction D360ter, j'utliserai cette fonction plutôt, ce que mon tuteur m'a demandé de faire, cela lui fera plaisir !

    Merci encore.

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

Discussions similaires

  1. Calcul de durée entre deux dates en années, mois, jours, heures, minutes, secondes et reste
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 02/10/2015, 12h31
  2. Réponses: 16
    Dernier message: 26/12/2013, 15h52
  3. [DeskI V5-V6] Calcul durée entre deux dates
    Par imslux dans le forum Débuter
    Réponses: 1
    Dernier message: 24/07/2013, 14h47
  4. Réponses: 10
    Dernier message: 14/12/2007, 14h13

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