Determiner la date la plus proche de la fin de l'annee
tonton33650
Messages postés23Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention 3 décembre 2008
-
12 juin 2007 à 11:43
tonton33650
Messages postés23Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention 3 décembre 2008
-
12 juin 2007 à 17:08
Bonjour a tous,
J'ai un petit (ou plutot gros) souci avec la manipulation des dates avec VBA.
Dans une feuille, j'ai dans une colonne une serie de dates, correspondant a des dates d'amortissement d'un actif. Suivant le profil d'amortissement de ma valeur, je peux donc me trouver avec 12, 4 ou 2 dates pour une meme annee. Ce que je cherche a faire, c'est renvoyer dans une autre feuille la valeur de mon actif a la fin de chaque annee ou du moins a la date la plus proche de la fin de chaque annee. Ainsi, si pour l'annee 2007, mes dates sont le 16/02/2007, 16/05/2007, 16/08/2007, 16/11/2007, je souhaiterais donc trouver la valeur de mon actif au 16/11/2007 et faire une boucle sur toutes les annees d'amortissement. Mais apres m'etre casse la tete sur les fonctions relatives a la manipulation des dates, je ne parviens pas du tout a determiner les dates dont j'ai besoin.
Je ne vous demande certainement pas de me taper le code, mais simplement de m'aiguiller un peu.
Quelqu'un aurait-il une idee de la methode a employer, ou vers quel chemin il faut que je me dirige?
Merci pour votre aide
A voir également:
Determiner la date la plus proche de la fin de l'annee
tonton33650
Messages postés23Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention 3 décembre 2008 12 juin 2007 à 12:28
Merci Renfield
J'aurai besoin d'une petite precision suite a ce que tu m'a donne. Si je defini la plage dans laquelle se trouve mes valeurs et que je lui demande pour chaque Year dans cette table de me selectionner Max(Madate), est ce que je m'approche de ce que tu me proposes ou je suis enocre loin?
code:
Sub max_date()
Dim LastDate As Date
Dim Amort_Schedule As Range
Set Amort_Schedule = Range(Sheet2.Cells(6, 2), Sheet2.Cells(122, 2))
For Each Year(LastDate) In Amort_Schedule
Max(LastDate).Select
........
End Sub
Je n'arrive pas trop a voir comment lui traduire WHERE dans ce que tu m'as propose?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 12 juin 2007 à 12:47
Salut,
Je ne suis pas sur d'avoir tout saisi mais regarde ceci
Function max_date() As Date
Dim LastDate As Date
Dim Amort_Schedule As Range
Dim Ra As Range
Set Amort_Schedule = Range(Sheet2.Cells(6, 2), Sheet2.Cells(122, 2))
For Each Ra In Amort_Schedule
If Year(CDate(Ra.Value)) = 2007 And CDate(Ra.Value) > LastDate Then
LastDate = CDate(Ra.Value)
End If
Next
max_date = LastDate
End Function<hr />, ----
[code.aspx?ID=41455 By Renfield]
tonton33650
Messages postés23Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention 3 décembre 2008 12 juin 2007 à 16:02
merci pour vos reponses, c'est excatement ce qu'il ma fallait.
J'ai cependant encore une question sur le Year proposé dans vos exemples. Je ne sais pas si j'ai ete super clair lorsque j'ai decris ce que je voulais faire, mais ce que je voulais dire c'est qu'il me faut trouver la derniere date de chaque annee. De votre code j'ai essayé de faire une boucle sur les differentes valeurs que vont pouvoir prendre mes annees (chqaue actif qyqnt une maturite plus ou moins longue, le nombre d'annees sera differents d'un actif a l'autre) Bref, je voudrais juste savoir comment operer cette boucle,
Voici ce que j'ai fait mes je dois dire que mes debuts en VBA ne sont pas tres convaincants!!
code:
Function max_date() As Date
Dim LastDate As Date
Dim Amort_Schedule As Range
Dim Ra As Range
Dim All_years As Collection
Dim Nb_Annee As Variant
Set Amort_Schedule = Range(Sheet2.Cells(6, 2), Sheet2.Cells(122, 2))
For i = 6 To 122
Nb_Annee = Year(CDate(Cells(i, 2).Value))
Set All_years = All_years.Nb_Annee.Add
Next i
For Each Nb_Annee In All_years
For Each Ra In Amort_Schedule
If Year(CDate(Ra.Value)) = 2008 And CDate(Ra.Value) > LastDate Then
LastDate = CDate(Ra.Value)
End If
Next
max_date = LastDate
Next
End Function
Au cas ou mon code soit vraiment n'importe quoi, je prefere vous donnez mes intentions qui etaient de stocker dans une collection les differentes valeurs possibles de mes annees pour ensuite les reutiliser dans :
For each (valeur de Year) dans (nouvelle collection)
tonton33650
Messages postés23Date d'inscriptionvendredi 11 mai 2007StatutMembreDernière intervention 3 décembre 2008 12 juin 2007 à 17:08
Bon apres de nouvelles reflexions voici ce que j'ai trouve pour faire ma boucle sur les annees.
Code:
Function max_date() As Date
Dim LastDate As Date
Dim Amort_Schedule As Range
Dim Ra, cells As Range
Dim All_years As New Collection
Set Amort_Schedule = Range(Sheet2.cells(6, 2), Sheet2.cells(122, 2))
For Each cells In Amort_Schedule
All_years.Add Year(CDate(cells.Value))
Next
i = 1
For Each Item In All_years
For Each Ra In Amort_Schedule
If Year(CDate(Ra.Value)) = Item And CDate(Ra.Value) > LastDate Then
LastDate = CDate(Ra.Value)
End If
Next
max_date = LastDate
Sheet2.cells(1, 1).Offset(i, 0).Value = max_date
i = i + 1
Next
End Function
La boucle se met bien en place MAIS ma collection All_years stocke les annees de chaque date en d'autres termes, lorsque j'ai 4 dates pour une meme annee elle me retient 4 fois cette annee. La methode .Add ne permet elle pas de stocker les valeurs mais de facon unique ???