[vba] datediff

Résolu/Fermé
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 - Modifié par yacleouf le 28/06/2010 à 14:45
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 - 1 juil. 2010 à 08:39
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

yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
28 juin 2010 à 14:54
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
28 juin 2010 à 15:05
Bonjour,

essaies
MsgBox Format(DateDiff("d", Range("A1"), DateSerial(Year(Range("A1")), 12, 31)), "#,##0") & " jours"
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
28 juin 2010 à 15:13
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
28 juin 2010 à 15:26
comprend pas ta demande....
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
28 juin 2010 à 15:50
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
28 juin 2010 à 16:16
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
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
28 juin 2010 à 17:22
ok merci je vais essayer sa !
et je te fais un retour après
0
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
30 juin 2010 à 11:17
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
Modifié par michel_m le 30/06/2010 à 11:49
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
yacleouf Messages postés 438 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
1 juil. 2010 à 08: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