Incrémentation de date, heure fonction find
Bonjour à tous,
Voici le problème :
J'ai un fichier avec date & heure dans la 1ere colonne et une valeur dans la 2eme (incrémenté pour chaque heure, mais il peut y avoir des ligne qui manque, par exemple passer toute une journée en 1 ligne)
De l'autre coté j'ai un onglet avec toutes les heures (complet cette fois) et je dois transférer les données d'un fichier à l'autre et mettre -1 quand les valeurs manquent.
Or quand je fais ce petit test
Sub test()
Dim var
Dim date_inc As Date
date_inc = "09/10/2017 23:00:00"
var = ActiveSheet.Columns(1).Cells.Find(what:=date_inc, LookAt:=xlWhole).Row
MsgBox var
date_inc = DateAdd("h", 1, date_inc)
var = ActiveSheet.Columns(1).Cells.Find(what:=date_inc, LookAt:=xlWhole).Row
MsgBox var
End SubLa première box m'affiche bien la ligne correspondante et j'ai une erreur à la deuxième box
J'ai essayé avec la variante
var = ActiveSheet.Columns(1).Cells.Find(what:=date_inc & " 00:00:00", LookAt:=xlWhole).Row
MsgBox varPas de résultat non plus.
Si je met dateadd("h",2,date_inc) ça fonctionne. Il y a vraiment un pb avec les jours entier que je n'arrive pas à résoudre
mes dates sont au format : Personnalisé aaaa-mm-jj h:mm:ss
Il n'y a aucun problème pour sauter les lignes vides dans le reste de mon code c'est juste le passage aux jours entiers qui pose problème... si qqn a une solution
j'arrive pas a joindre mon fichier, voici ce qui se trouve dans les cellules :
09/10/2017 11:00:00
09/10/2017 12:00:00
2017-10-09 23:00:00
2017-10-10 0:00:00
2017-10-10 1:00:00
Merci pour tout!
Quentin
Navré du spam j'ai réussi a ajouter le fichier date
Bonjour à tous,
je commence vraiment à peiner ^^
j'ai multiplié les essais notamment :
date_inc = "09/10/2017 23:00:00"
var = ActiveSheet.Columns(1).Cells.Find(what:=DateValue(date_inc) + TimeValue(date_inc), LookAt:=xlWhole).Rowqui fonctionne pour les dates non entières mais toujours le même problème quand j'arrive sur un jour entier...
je cherche un moyen (pas trop lourd) de transformer la date en nombre et de vérifier si c'est un entier. mais il y a certainement plus élégant non?
Merci d'avance pour tous les Watts que votre cerveau consommera sur ce problème.
A très bientôt.
Edit :
Réaction étrange :
j'ai remarqué si je passais la première erreur et continuai a déroulé il n'y avait plus de problème. SAUF QUE,
le jour détecté correspond à la veille du jour implémenté (c'est vraiment super étrange o_O
Voici un bout de code pour vous faire une idée savoir si je suis seul avec ce "bug" :
ub testes()
Dim var, i
Dim date_inc As Date
date_inc = "10/10/2017 01:00:00"
date_inc = DateAdd("h", -24, date_inc)
For i = 1 To 24
date_inc = DateAdd("h", 1, date_inc)
Next i
MsgBox date_inc
var = ActiveSheet.Columns(1).Cells.Find(what:=date_inc, LookAt:=xlWhole).Row
MsgBox var & " " & date_inc
date_inc = DateAdd("h", 1, date_inc)
MsgBox date_inc
var = ActiveSheet.Columns(1).Cells.Find(what:=date_inc, LookAt:=xlWhole).Row
MsgBox var & " " & date_inc
End Subça me renvoi systématiquement le jour d'avant.
j'ai essayé avec
date_inc = DateAdd("h", -1, date_inc)pour remonté le temps mais exactement la même conclusion : affichage du jour précédent : lorsque je demande de trouver "entièrement le jour 10/10/2017" il m'indique la ligne du "09/10/2017" je ne comprend vraiment pas
EDIT EDIT :
en ajoutant la ligne
MsgBox var & " " & date_inc & " " & CDbl(date_inc) & " " & CDbl(Cells(var, 1))à la fin je me suis rendu compte que fair +1h n'était pas une fraction exacte car ça me donne qqch comme 43017,99999999 et 43017
Bonsoir à tous,
Après une journée passé sur le pb ^^ chacun sa vitesse :p jme suis finalement convaincu à passer par CDbl(date) qui transforme la date en chiffre et au lieu d'ajouter 1h à chaque fois (ce qui créé des arrondis cumulés) j'ai décidé j'ajouter 1/24 eme de jour, ce qui à le bon gout de donner des jours piles.
a bon entendeur.