problème inputbox et heure [VBA excel] - VB/VBA/VBS - Programmation
Marsh Posté le 11-02-2011 à 11:19:15
Je crois que le problème vient de l'égalité, car il y a peu de chances qu'elle soit vérifier, puisque l'heure est stockée sous la forme d'une fraction.
Donc je pense qu'il y aurait trois solutions :
- Arrondir les fractions, par exemple à seulement 3 chiffres après la virgule au lieu des 6 (si je ne me trompe pas) chiffres.
- Remplacer l'égalité par supérieur à heure - delta, et inférieur à heure + delta.
- (Ma solution préférée) Convertir en heure, minutes, secondes, et faire la comparaison sur ces trois parties. La conversion se fait avec hour(), mnute(), et second(). Cela donnerait :
sub test() |
Marsh Posté le 11-02-2011 à 11:21:07
Ca le fera mieux comme ca :
Code :
|
type:=1 et TimeValue derriere je ne vois pas comment ca peut marcher...
Type:=1 donc si tu tapes 14:40, il le converti en 0.61
TimeValue(0.61) ca ne peut pas marcher... Il lui faut une chaine...
Ensuite derriere imaginons que tu veuilles comparer ta variable heure (comme je la definis). Passer par TimeValue te passe ta variable de type chaine en variable de type Date.
Et derriere tu compares cette variable de type date à une variable de type numérique (numérique renvoyé, car Cells(i,1) renverra 0.61 au lieu de 14:40). Il faut donc la convertir avec un CDate()
Voili voila
Edit : billgatesanonym (Tu n'as pas du tester ton code... Si ?)
Marsh Posté le 11-02-2011 à 12:12:51
dje69r, j'ai essayé ton code mais je reste toujours dans la boucle.
Quand la boite de dialogue s'ouvre pour demander l'heure je lui rentre par exemple "13:15:45", sachant que ma colonne est au format personnalisé hh:mm:ss
Marsh Posté le 11-02-2011 à 12:49:24
Ca marche chez moi
http://dje69r.free.fr/bloodnico.xls Tu cherches 13:30:00 et ca roule
Ou alors il ne trouve pas ton heure, elle existe dans la liste ? Comme tu ne dis pas de sortir de la boucle s'il ne trouve rien...
Marsh Posté le 11-02-2011 à 13:08:39
Bonjour dje68r,
Tu as raison, je n'avais pas testé.
Maintenant, je l'ai fait, et ça marche avec le code suivant :
Sub test() |
Il fallait enlever ", type:= 1" dans le Application.InputBox...
Mais ce n'est pas tout, il faut aussi tenir compte de l'imprécision des fractions, et donc, il faut aussi soit arrondir, soit tester sur un intervalle, soit tester sur des données converties comme je le fais.
Marsh Posté le 11-02-2011 à 16:37:32
merci dje69r, mais.... et oui lol il se passe un truc incompréhensible.
Quand je demande 13:30:00 effectivement ca marche, je demande 13:00:00 je reste dans la boucle, idem pour 15:30:00 et d'autres horaires.
Avec 12:30:00 ca marche également.
je suis largué ^^
Marsh Posté le 11-02-2011 à 10:17:20
bonjour,
j'ai réalisé une macro dans le but de chercher une heure précise dans une plage de données au format heure (hh:mm:ss).
voici la bête:
sub test()
Dim choix, heure, i As Variant
choix = Application.Inputbox(prompt:="choisir heure", type:= 1)
heure = TimeValue(choix)
i = 1
While not cells(i, 1) = heure
i = i + 1
Wend
cells(i, 1).select
end sub
pour la recherche d'un nombre c'est bon, mais pour trouver une heure je reste dans la boucle.
Je pense qu'il doit y avoir un icompatibilité entre le format dans inputbox et mes cellules, mais je en sais pas comment faire.
Merci
Nico