XL 2013 Lister les dates comprises entre 2 dates Date1 et Date2

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ananas94

XLDnaute Junior
Bonjour,

Après beaucoup de recherches vaines sur des forums, je me permets de vous exposer mon problème : je souhaite lister des dates successives entre 2 dates Date1 et Date2, que je fais apparaître successivement dans une fonction pour un fichier d'essai.
J'ai codé un algorithme, mais j'obtiens un résultat aberrant. Vous trouverez en pièce jointe un fichier d'essai. Si vous avez une idée, je suis preneuse ...

Merci à vous ! 🙂
 

Pièces jointes

Solution
Bonjour,

Cdate (1 /1/ 2021) va tenter de resoudre 1 divisé par 1 divisé par 2021 soit 0,00049480455220188
qui éventuellement peut passé pour une heure mais pas une date.

CDate("1/1/2021") donnera une date.

VB:
Sub test()
   '
   ' Afficher les dates du tableau retourné par la fonction
   MsgBox Join(ListerDatesEntre2Dates(CDate("1/1/2021"), CDate("6/1/2021")), vbCrLf) ' On liste toutes les dates comprises entre le 01/01/2021 et le 06/01/2021 inclus
End Sub

Function ListerDatesEntre2Dates(Date1 As Date, Date2 As Date) As Variant

    Dim Nb As Integer, i As Integer 'Nombre de dates, compteur de boucle
    Dim t ' tableau à renvoyer avec la liste de dates
  
    '
    ' Déterminer le nombre de dates
    Nb = Date2 - Date1 + 1
    '...
Bonjour Ananas94.

Correction du code a tester :
VB:
Sub test()
    MsgBox ListerDatesEntre2Dates(CDate("01/01/2021"), CDate("06/01/2021")) ' On liste toutes les dates comprises entre le 01/01/2021 et le 06/01/2021 inclus
End Sub


Function ListerDatesEntre2Dates(Date1 As Date, Date2 As Date) As String
    Dim DateCible As Date 'DateCible est la date comprise entre Dtae1 et Date2 que l'on étudie successivement
    Dim i% 'Numéro des jours
    Dim DateTxt As String
    For i = 1 To DateDiff("d", Date1, Date2, vbMonday) + 1 'Nombre de jours de différence entre date1 et Date2. On ajoute 1 car la fonction DateDiff ne compte pas Date1 dans le décompte de jours.
        If i = 1 Then
            DateTxt = Date1
            DateCible = Date1
        ElseIf i > 1 Then
            DateCible = DateAdd("d", 1, DateCible)
            DateTxt = DateTxt & Chr(10) & DateCible
        End If
    Next i
    ListerDatesEntre2Dates = DateTxt
End Function
 
Bonjour,

Cdate (1 /1/ 2021) va tenter de resoudre 1 divisé par 1 divisé par 2021 soit 0,00049480455220188
qui éventuellement peut passé pour une heure mais pas une date.

CDate("1/1/2021") donnera une date.

VB:
Sub test()
   '
   ' Afficher les dates du tableau retourné par la fonction
   MsgBox Join(ListerDatesEntre2Dates(CDate("1/1/2021"), CDate("6/1/2021")), vbCrLf) ' On liste toutes les dates comprises entre le 01/01/2021 et le 06/01/2021 inclus
End Sub

Function ListerDatesEntre2Dates(Date1 As Date, Date2 As Date) As Variant

    Dim Nb As Integer, i As Integer 'Nombre de dates, compteur de boucle
    Dim t ' tableau à renvoyer avec la liste de dates
  
    '
    ' Déterminer le nombre de dates
    Nb = Date2 - Date1 + 1
    '
    ' Prévoir un tableau de retour en conséquence
    ReDim t(1 To Nb)
    '
    ' Remplir le tableau avec les dates
    For i = 1 To Nb
        t(i) = Date1 - 1 + i
    Next i
      
    ListerDatesEntre2Dates = t

End Function

Cordialement
 

Pièces jointes

Dernière édition:
Bonjour Ananas94.

Correction du code a tester :
VB:
Sub test()
    MsgBox ListerDatesEntre2Dates(CDate("01/01/2021"), CDate("06/01/2021")) ' On liste toutes les dates comprises entre le 01/01/2021 et le 06/01/2021 inclus
End Sub


Function ListerDatesEntre2Dates(Date1 As Date, Date2 As Date) As String
    Dim DateCible As Date 'DateCible est la date comprise entre Dtae1 et Date2 que l'on étudie successivement
    Dim i% 'Numéro des jours
    Dim DateTxt As String
    For i = 1 To DateDiff("d", Date1, Date2, vbMonday) + 1 'Nombre de jours de différence entre date1 et Date2. On ajoute 1 car la fonction DateDiff ne compte pas Date1 dans le décompte de jours.
        If i = 1 Then
            DateTxt = Date1
            DateCible = Date1
        ElseIf i > 1 Then
            DateCible = DateAdd("d", 1, DateCible)
            DateTxt = DateTxt & Chr(10) & DateCible
        End If
    Next i
    ListerDatesEntre2Dates = DateTxt
End Function
Merci beaucoup ça fonctionne très bien, mille mercis
 
Bonjour,

Cdate (1 /1/ 2021) va tenter de resoudre 1 divisé par 1 divisé par 2021 soit 0,00049480455220188
qui éventuellement peut passé pour une heure mais pas une date.

CDate("1/1/2021") donnera une date.

VB:
Sub test()
   '
   ' Afficher les dates du tableau retourné par la fonction
   MsgBox Join(ListerDatesEntre2Dates(CDate("1/1/2021"), CDate("6/1/2021")), vbCrLf) ' On liste toutes les dates comprises entre le 01/01/2021 et le 06/01/2021 inclus
End Sub

Function ListerDatesEntre2Dates(Date1 As Date, Date2 As Date) As Variant

    Dim Nb As Integer, i As Integer 'Nombre de dates, compteur de boucle
    Dim t ' tableau à renvoyer avec la liste de dates
 
    '
    ' Déterminer le nombre de dates
    Nb = Date2 - Date1 + 1
    '
    ' Prévoir un tableau de retour en conséquence
    ReDim t(1 To Nb)
    '
    ' Remplir le tableau avec les dates
    For i = 1 To Nb
        t(i) = Date1 - 1 + i
    Next i
     
    ListerDatesEntre2Dates = t

End Function

Cordialement
Merci beaucoup, ça fonctionne très bien, mille mercis !!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour