Récupérer date dans format datetime VBA

Bonjour,

J'aimerais récupérer seulement la date de ma cellule qui est au format jj/mm/aaaa hh:mm:ss dans Excel. Il y a beaucoup de fonction dans DateTime mais je ne sais pas trop laquelle utiliser?!! Ici j'ai mis dateValue mais il me dit erreur de type ! Je voudrait aussi récupérer l'heure si possible

Voici mon code VBA :
j = 2
While (DateValue(Sheets("feuille1").Range("A" & j).Value) = JourIntervalle)
If (TimeValue(Sheets("feuille1").Range("A" & j).Value >= HeureDebut)) And (TimeValue(Sheets("feuille1").Range("A" & j).Value <= HeureFin)) Then
SommeEvenement = SommeEvenement + Sheets("feuille1").Range("D" & j).Value
NbEvenement = NbEvenement + 1
End If
j = j + 1
Wend

Ma variable JourIntervalle est au format jj/mm/aaaa

Merci d'avance

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Suggestion de code :

    Option Explicit 
    ' 
    
    Sub Test() 
    
        Dim JourIntervalle As Date 
        Dim HeureDebut As Date 
        Dim HeureFin As Date 
        Dim SommeEvenement As Variant 
        Dim NbEvenement As Long 
        
         
        Dim j As Integer 
    
        JourIntervalle = Now 
        HeureDebut = Now 
        HeureFin = Now 
    
        j = 1 
       
        While Format((Sheets("feuil1").Range("A" & j).Value), "YYYY-MM-DD") = Format(JourIntervalle, "YYYY-MM-DD") 
            If (Format((Sheets("feuil1").Range("A" & j).Value), "HH:MM:SS") >= Format(HeureDebut, "HH:MM:SS")) And _ 
                (Format((Sheets("feuille1").Range("A" & j).Value), "HH:MM:SS") <= Format(HeureFin, "HH:MM:SS")) Then 
                SommeEvenement = SommeEvenement + Sheets("feuil1").Range("D" & j).Value 
                NbEvenement = NbEvenement + 1 
            End If 
            j = j + 1 
        Wend 
    
    End Sub 
    ' 
    


    Cdt

    Lupin
    1. Merci, cependant celà ne semble pas fonctionner.

      Je voudrais aussi faire la différence entre deux dates avec DateDiff cependant à cause de ces format ça ne me donne pas le bon resultat.

      voici ma formule :

      NbJours = DateDiff("d", Sheets("feuille1").Range("A2").Value, Sheets("feuille1").Range("A2").End(xlDown).Value) + 1

      Et aussi faire un DateAdd pour ajouter un nombre de jour à ma date de début dans ma boucle (même problème):

      DateCherchee = DateAdd("d", Jour, ActiveWorkbook.Sheets("feuille1").Range("A2").Value)

      Si vous avez une idée ?!

      Merci
      1. Bonjour,

        Suggestion :

        Décomposer votre code en y insérant des variables.

        Exemple :

        NbJours = DateDiff("d", Sheets("feuille1").Range("A2").Value, Sheets("feuille1").Range("A2").End(xlDown).Value) + 1

        Sub Test()
        
            Dim NbJours As Long
            
            Dim Valeur1 As Variant
            Dim Valeur2 As Variant
            
            Valeur1 = Sheets("feuille1").Range("A2").Value
            Valeur2 = Sheets("feuille1").Range("A2").End(xlDown).Value
            
            NbJours = DateDiff("d", Valeur1, Valeur2) + 1
        
            MsgBox NbJours
        
        End Sub
        '
        


        En décomposant ainsi, vous diminuer le risque d'erreur.

        Personnellement, je code sous VBA depuis 1995 et je décompose
        encore lorsque le code devient compliqué à lire et de fait même
        à interprèter.

        Enfin, cela demeure un opignon personnel.

        Cdt

        Lupin
        1. Contributeur
          Bonjour

          en VBa, il vaut mieux travailler en numéro de série
          par ex démo d'école qui mémorise une date heure et restitue la date 10 jours et 2 heures+ tard

          Dim Jour As Long 
          Dim Jour As Long 
          Dim Heure As Double 
          With Sheets(1) 
               'mémorisation
               Jour = Int(Range("A1")) 
               Heure = Range("A1") - Jour 
               'restitution 
               With Range("A2") 
                    .Value = (Jour+10) + (Heure+120/1440) 
                    .NumberFormat = "dd/mm/yyyy h:mm;@" 
               End With 
          End With


          ainsi les calculs sur les dates et heures sont facilités: pas besoin de datediff par exemple

          Michel