Récupérer date dans format datetime VBA

vans7k -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Utilisateur anonyme
     
    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
    0
  2. vans7
     
    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
    0
  3. Utilisateur anonyme
     
    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
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0