[vba] datediff

Résolu
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   -  
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
comprend pas ta demande....
0
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   39
 
ok merci je vais essayer sa !
et je te fais un retour après
0
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   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