Récupérer date dans format datetime VBA

Fermé
vans7k - 15 avril 2011 à 11:52
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 28 avril 2011 à 08:17
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

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
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
Utilisateur anonyme
27 avril 2011 à 21:29
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 312
Modifié par michel_m le 28/04/2011 à 08:28
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