Récupérer date dans format datetime VBA
vans7k
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
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
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 :
Cdt
Lupin
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
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
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
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
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
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
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
ainsi les calculs sur les dates et heures sont facilités: pas besoin de datediff par exemple
Michel
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