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 :
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 -
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 -
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