[vba] datediff

Résolu
yacleouf Messages postés 461 Statut Membre -  
yacleouf Messages postés 461 Statut Membre -
Bonjour,
je suis confronté à un problème ou je dois calculer le nombre de jour entre une date donnée en A1 et la fin de l'année de cette date, en gros si la date donnée en A1 est 28/06/2010, il faut que ma formule datediff utilise la date 31/12/2010 etc pour les dates à venir ...
J'utilise déjà cette formule :
MsgBox Format(DateDiff("d", Range("A1"), date de fin d'année), "#,##0") & " jours"

si quelqu'un à déjà était confronté à sa ^^



Google is your friend!

4 réponses

  1. yacleouf Messages postés 461 Statut Membre 39
     
    je précise que je dois réutiliser le résultats, car j'effectue 2 fois ce calculs une fois pour connaitre le nombre de jours d'une date A à la fin de l'année et celui d'une date B que j'additionnerais par la suite .
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    essaies
    MsgBox Format(DateDiff("d", Range("A1"), DateSerial(Year(Range("A1")), 12, 31)), "#,##0") & " jours"
    0
  3. yacleouf Messages postés 461 Statut Membre 39
     
    C'est parfait ! en plus la formule gère déjà le cas des années bissextile vraiment nikel
    j'ai encore 1 question ...
    comment est ce que je pourrait faire, si j'ai besoin de mémoriser ce résultats car je vais effectuer ce calcul deux fois, et pour au final additionner les deux résultats
    ma formule sera un truc du genre :
    20 +résultat premier caclul/nombre de jour de l'année= (résultat à mémoriser)
    20 +résultat deuxième caclul/nombre de jour de l'année = (résultat à mémoriser)
    et pour terminer sur addition des deux résultats...
    j'espère ne pas en demander de trop ^^"
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      comprend pas ta demande....
      0
    2. yacleouf Messages postés 461 Statut Membre 39
       
      désolé... c'est vrai que ma demande n'est pas très simple, pour simplifier cela disons que j'ai besoin d'utiliser cette formule en la stockant dans une variable afin de pouvoir la réutilisé plus tard...
      j'ai essayer déjà de faire quelque chose, mais j'ai du me tromper en définissant le type de la variable, j'ai mis un integer et aussi essayer avec un string, mais sa ne marche pas ...
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      oui, je crois avoir compris

      en fait actuellement
      test=Format(DateDiff("d", Range("A1"), DateSerial(Year(Range("A1")), 12, 31)), "#,##0") & " jours"
      et bien un string et donc tu ne peux pas faire de calcul

      par contre
      test = DateDiff("d", Range("A1"), DateSerial(Year(Range("A1")), 12, 31))
      te renvoie un entier que tu peux utiliser pour tes formules en aval
      quite à la fin des calculs d'utiliser la fonction "format" pour la lisibilité

      tu dis...
      0
    4. yacleouf Messages postés 461 Statut Membre 39
       
      ok merci je vais essayer sa !
      et je te fais un retour après
      0
  4. yacleouf Messages postés 461 Statut Membre 39
     
    salut,
    désolé du retard de ma réponse...
    entre temps j'ai eu le temps d'essayer beaucoup de choses, et voila à quoi j'arrive :
    Dim test As Integer, resultat As Integer, test2 As Integer, result As Integer
    test2 = DateDiff("d", Range("E10"), DateSerial(Year(Range("E10")), 1, 1))
    test = DateDiff("d", Range("E10"), DateSerial(Year(Range("E10")), 12, 31))
    resultat = ((28 * test2) + (14 * test)) / 365
    result = resultat
    
    result.Value = Cells(D, 29).Value


    enfaite j'essaye de lui demander de me faire ce calcul, et de me retourner le résultat dans la cellule D29
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      salut

      ne serait ce pas plutôt ça:

      range("D29")=((28 * test2) + (14 * test)) / 365


      ou si tu as besoin de "result" pour autre chose

      result=((28 * test2) + (14 * test)) / 365 
      range("D29")= result 
      
      0
    2. yacleouf Messages postés 461 Statut Membre 39
       
      merci! c'est nickel, ta réponse me prouve que parfois je suis un peut borné dans ce que je fais, et que je cherche pas la simplicité!!
      merci encore !
      0