Incrémenter une date plusieurs fois de suite

Incrémenter une date plusieurs fois de suite - VB/VBA/VBS - Programmation

Marsh Posté le 09-01-2006 à 19:39:41    

Bonjour à tous,
 
Je galère quelque peu sous excel au boulot, je m'explique:
 
- Je suis en possession d'un tableau contenant entre autres des dates de début de contrat et la durée de ces contrats en mois.
- Ces contrats sont à reconduction tacite, pour une période égale à celle du précédent contrat
- Je cherche à connaitre la date de fin du contrat en cours. Par ex. dans mon tableau j'ai la date de début de contrat 01/01/2000, le contrat dure 12 mois, je dois donc obtenir cette date de fin du contrat en cours: 01/01/2007 (le contrat a été renouvelé par reconduction tacite 7 fois).
 
J'utilise la fonction MOIS.DECALER(DATE;DUREE) pour incrémenter la date de début de contrat, mais le problème est que l'incrémentation ne se fait qu'une fois. J'aimerai pouvoir coupler cette formule à une autre qui me permettrait de me baser sur la date actuelle, pour pouvoir calculer la fin du contrat en cours. Ca donnerait un truc du genre:
 
While (date_fin_contrat<date_actuelle)
{
date_fin_contrat=MOIS.DECALER(date_debut_contrat,duree);
}
 
Evidemment je n'y connais rien en VB, si quelqu'un pouvait me mettre sur la piste je lui en serais reconnaissant  :jap:


Message édité par tilolebo le 10-01-2006 à 20:15:03
Reply

Marsh Posté le 09-01-2006 à 19:39:41   

Reply

Marsh Posté le 10-01-2006 à 11:10:44    

utilise la fonction DateAdd  
http://msdn.microsoft.com/library/ [...] ateadd.asp


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 10-01-2006 à 17:08:17    

Eurêka !
 
Vu que ça me gavait vraiment de faire ça en VB je me suis torturé l'esprit ce matin pour trouver un moyen de faire ça plus simplement, et j'ai trouvé:
 
MOIS.DECALER(date_début_contrat;durée_contrat_en_mois*ARRONDI.SUP(((AUJOURDHUI()-date_début_contrat)/30,4375)/durée_contrat;0))
 
En fait l'idée c'est que je calcule la différence en jours entre la date d'aujourd'hui et la date de début de contrat (je n'ai pas trouvé sous excel le moyen de calculer cet intervalle en mois, ce qui est possible sous VB avec la fonction DateDiff, paramètre DateInterval.Month).
 
Puis je divise ce nombre de jours par 30,4375, qui est en fait le nombre moyen de jours/mois sur une période de 4 ans comprenant une année bissextile (oui je sais je chipote mais bon  :p ). J'obtient donc le nombre de mois entre le début du contrat et la date actuelle. Je divise ensuite le résultat obtenu par la durée du contrat (en mois), ce qui me donne le nombre de contrats signés depuis la date de début de contrat. J'arrondis ensuite par excès (pour comptabiliser le dernier contrat commencé), puis je multiplie par la durée du contrat.
 
J'obtiens ainsi le nombre de mois entre la date de début de contrat et la date de fin de contrat. Je n'ai plus qu'à utiliser ma formule MOIS.DECALER() pour obtenir la date de fin de contrat.


Message édité par tilolebo le 10-01-2006 à 19:12:55
Reply

Marsh Posté le 10-01-2006 à 17:14:09    

huumm je pense que tu devrais utiliser la fonction slip
pour recuperer les champ jj mm ou aaaa de tes date.
Apres tu fais un difference entre les valeurs mois renvoye.SLIP te renvoie un tableau de chaine!
iret=SLIP(mydate,....)
mois=iret(1)      'ca te donne le mois tu fais ca deux fois pr tes deux dates...à voir enfin si ton truc marche laisse le comme ca!!!et bon taff

Reply

Marsh Posté le 12-01-2006 à 21:31:14    

pour calculer le nombre de mois entre 2 dates de contrats, j'utilise au boulot la fonction directement sur excel :  
=datedif(début_de_contrat;fin_de_contrat;"m" )
 
m pour mois en tenant compte de l'année et ym si tu n'en tiens pas compte

Reply

Marsh Posté le 18-01-2006 à 18:05:58    

et pour récupérer les composantes d'une date, ya des fonctions embarquées comme day(date), month(date) et year(date)
 
ensuite, je pense que dateadd est le plus approprié et le plus propre mais on peut aussi faire une addition simple de genre
 
datefin = daserial(year(datedébut),month(datedébut)+12*duréeducontrat),day(datedébut)-1).  
comme ça, tu as bien le dernier jour du dernier mois du contrat.
 
on oublira pas de déclarer les variables date (pas comme moi).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed