Considérer une période de temps à partir d'une date

Bonjour à tous,

Alors voilà, malgré mes faibles connaissances en programmation (introduction faites durant ma formation d’ingé avant spécialisation), je dois résoudre un problème au semblant simple mais qui s’avère plus tendu .

En effet, il m’a été fourni un Excel connecté à SAP. Lorsque dans une cellule je rentre une certaine période de temps (par exemple : 06.2018,07.2018,08.2018,09.2018,10.2018), Excel va chercher différentes data dans SAP qui s'étendent sur cette période.

Il m’a été demandé de trouver un moyen d’automatiser cette mise à jour de dates. C’est-à-dire que si j’ouvre l’Excel au mois de décembre 2018 et que je veux savoir ce qu’il s’est passé au cours des 12 derniers mois, la cellule affichera automatiquement :

12.2017,01.2018,02.2018,03.2018,04.2018,05.2018,06.2018,07.2018,08.2018,09.2018,10.2018,11.2018

(je suis obligé de garder ce format assez long car c’est celui que l’Excel est à même de lire).

Auriez-vous le moindre aide à me fournir à ce sujet ? Comment dois-je m’y prendre ?

Je vous remercie d’avance !

Tim

Bonjour,

je suis obligé de garder ce format assez long car c’est celui que l’Excel est à même de lire

Je serais curieux de savoir comment Excel peut lire ceci ?

12.2017,01.2018,02.2018,03.2018,04.2018,05.2018,06.2018,07.2018,08.2018,09.2018,10.2018,11.2018

Ce ne sont absolument pas des dates valides au sens qu'Excel peut l'interpréter, pour lui, c'est du texte la preuve, tu entres cette chaîne dans une cellule, tu là sélectionnes et tu testes ce code :

Sub Test()

    MsgBox TypeName(ActiveCell.Value) & vbCrLf & TypeName(ActiveCell.Value2) & vbCrLf & TypeName(ActiveCell.Text)

End Sub

Maintenant, tu entres une date valide dans la cellule et tu re-testes le code, tu verras la différence !

Pour pouvoir interpréter tes dates, il te faut par exemple utiliser la fonction Split() pour les récupérer indépendamment les unes des autres et pour en faire des dates valides, ajouter un valeur de jour devant et ensuite, utiliser la fonction de conversion CDate(). Un exemple avec résultat dans la fenêtre d'exécution (Ctrl+G) :

Sub Test2()

    Dim T
    Dim I As Integer

    T = Split(ActiveCell.Value, ",")

    For I = 0 To UBound(T)

        Debug.Print TypeName(CDate("01" & "/" & Replace(T(I), ".", "/"))); "--->"; CDate("01" & "/" & Replace(T(I), ".", "/"))

    Next I

End Sub

Si tu veux obtenir la chaîne que tu présentes à partir d'une date (valide bien sûr !) tu peux utiliser ce genre de code (fonction perso) :

Function ChaineDates(Cel As Range, NBMois As Integer)

    Dim I As Integer
    Dim Chaine As String

    If Not IsDate(Cel.Value) Then ChaineDates = "#NON_VALIDE?": Exit Function
    If NBMois < 1 Then ChaineDates = "#NON_VALIDE?": Exit Function

    For I = 1 To NBMois

        Chaine = Chaine & Format(DateSerial(Year(Cel.Value), Month(Cel.Value) + I, 1), "mm.yyyy") & ","

    Next I

    Chaine = Left(Chaine, Len(Chaine) - 1)

    ChaineDates = Chaine

End Function

Que tu utilises dans Excel de cette façon :

=ChaineDates(A1;12)

où le premier argument est une date valide et le second, le nombre de mois voulus

Rechercher des sujets similaires à "considerer periode temps partir date"