[Excel-VBA] Comparaison de dates

Bonjour,

J'ai un souci avec des comparaisons de dates...

L'utilisateur saisi un intervalle du type:
"de 30/12/2005 à 02/01/2006"

Et j'aimerais faire en sorte que si une cellule contient une date comprise dans cet intervalle alors çà fait quelque chose.

Pour l'instant j'ai mis des MsgBox pour vérifier:

LaDerniere = Application.Workbooks(fichier(4)).Worksheets("Tableau").Cells(65536, choix).End(xlUp).Row
temps = Split(mot_clef, " ")
date1 = temps(1)
date2 = temps(3)
MsgBox (date1)
MsgBox (date2)
For i = 20 To LaDerniere
If date1 < Application.Workbooks(fichier(4)).Worksheets("Tableau").Cells(i, choix).Value Then
MsgBox ("plus grand que " & date1 & "")
End If
If Application.Workbooks(fichier(4)).Worksheets("Tableau").Cells(i, choix).Value < date2 Then
MsgBox ("plus petit que " & date2 & "")
End If


La comparaison fonctionne bien au niveau de la plus grande date de l'intervalle mais pas au niveau de la plus petite date...

Pour une date du 31/12/2005, le résultat est : "Plus petit que 02/01/2006" mais il ne veut pas me dire "Plus grand que 30/12/2005" ...

Merci de votre aide

--
"La culture c'est comme la confiture : moins on en a plus on l'étale"

17 réponses

  1. re:

    quelque chose comme ça :

        Dim DateDeb, DateFin As Date
        Dim DateCible As Date
        
        I = 1: choix = 1
        LaDerniere = Workbooks("Test.xls").Worksheets("Feuil1").Cells(65536, choix).End(xlUp).Row
        mot_clef = Range("I1").Value
        Temps = Split(mot_clef, " ")
        DateDeb = FormatDateTime(Temps(0))
        DateFin = FormatDateTime(Temps(1))
        For I = 1 To LaDerniere
            DateCible = FormatDateTime(Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, choix).Value)
            If ((DateDeb < DateCible) And (DateFin > DateCible)) Then
                Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, (choix + 2)).Value = ("Date comprise dans l'interval")
            Else
                Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, (choix + 2)).Value = ("Date non-comprise dans l'interval")
            End If
        Next I
    
    


    Lupin
    9
    1. bonjour,
      je veux savoir comment rechercher des données entre deux dates????????????
      c'est urgent
      5
      1. Salut,

        celles-ci ne sont pas défini ???

        LaDerniere
        Date1
        Date2
        Temps

        Lupin
        3
        1. Problème non résolu (merci de poster un complément d'information pour faire remonter le fil de discussion)
          1
          1. Salut KdTca,

            Peux-tu spécifier le type de variables !

            Dim LaDerniere As ...
            Dim choix As ...
            Dim date1,date2 As ...
            Dim temps() As ...

            Lupin
            1
            1. Dim chemin, mot_clef As String
              Dim valid, lancement, fin, k, choix As Integer
              Dim ok As Boolean
              Dim fso, Dossier, Flder As Object
              Dim fichier
              Dim cellule As Integer
              Dim Msg1, Msg2, Style, Title, Box
              Dim nb, derniere_colonne
              Dim cellul As String
              Dim par As Variant
              Dim datedeb, datefin As Date


              J'ai un peu changé mon code en fait...j'ai l'impression qu'on ne peut faire que ce style de comparaison avec les dates:

              If datefin > Application.Workbooks(fichier(4)).Worksheets("Tableau").Cells(i, choix).Value Then


              mais pas çà :
              If datefin < Application.Workbooks(fichier(4)).Worksheets("Tableau").Cells(i, choix).Value Then


              1
              1. re:

                chez-moi ça fonctionne nickel, ssi les format de date sont OK

                    I = 1: choix = 1
                    LaDerniere = Workbooks("Test.xls").Worksheets("Feuil1").Cells(65536, choix).End(xlUp).Row
                    mot_clef = Range("I1").Value
                    Temps = Split(mot_clef, " ")
                    DateDeb = Temps(0)
                    DateFin = Temps(1)
                    For I = 1 To LaDerniere
                        DateCible = FormatDateTime(Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, choix).Value)
                        If ((DateDeb < DateCible) And (DateFin > DateCible)) Then
                            Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, (choix + 2)).Value = ("Date comprise dans l'interval")
                        Else
                            Workbooks("Test.xls").Worksheets("Feuil1").Cells(I, (choix + 2)).Value = ("Date non-comprise dans l'interval")
                        End If
                    Next I
                
                


                Lupin
                1
                1. date1 et date2 sont devenues datedeb et datefin...

                  laderniere et temps, pas besoin de les déclarer...
                  0
                  1. Merci çà marche nickel! ;)
                    0
                    1. Ah ben non... j'ai essayé avec deux dates d'année différente et çà veut pas marcher! :'(
                      0
                      1. re:

                        c'est un problème de typage.

                        il te faut formatter toutes les variables en format DATE.
                        il faut comparrer des oranges avec des oranges, des pommes
                        avec des pommes, et enfin des dates avec des dates.

                        en fait comparer des variables n'est pas suffisant, il faut
                        comparer deux variables de même types.

                        Lupin
                        0
                        1. Tu veux que je fasse çà comment?
                          0
                          1. re:

                            et le résultat ?

                            ça fonctionne bien ainsi ?

                            Lupin
                            0
                            1. oui oui
                              j'avais juste oublier de mettre datecible en Date
                              j'ai fait qu'un essai avant de quitter le boulot et çà a marcher donc j'essaierai çà demain matin à nouveau! ;)

                              0