[VBA excel] problème inputbox et heure

problème inputbox et heure [VBA excel] - VB/VBA/VBS - Programmation

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
 
 
 

Reply

Marsh Posté le 11-02-2011 à 10:17:20   

Reply

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()  
Dim choix, heure, i As Variant  
choix = Application.Inputbox(prompt:="choisir heure", type:= 1)  
heure = TimeValue(choix)  
choix_hh = Hour(heure)
choix_mm = Minute(heure)
choix_ss = Second(heure)
i = 1  
      While choix_hh <> hour(cells(i, 1)) or choix_mm <> minute(cells(i, 1)) or choix_ss <> second(cells(i, 1))
           i = i + 1  
      Wend  
cells(i, 1).select  
end sub

Reply

Marsh Posté le 11-02-2011 à 11:21:07    

Ca le fera mieux comme ca :

Code :
  1. Sub test()
  2. Dim choix, heure, i As Variant
  3. choix = Application.InputBox("choisir heure" )
  4. heure = TimeValue(choix)
  5. i = 1
  6.      
  7.       While Not CDate(Cells(i, 1).Value) = heure
  8.            i = i + 1
  9.       Wend
  10. Cells(i, 1).Select
  11. End Sub


 
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  [:phoenxrebrth] (Tu n'as pas du tester ton code... Si ?)


Message édité par SuppotDeSaTante le 11-02-2011 à 11:26:45

---------------
Soyez malin, louez entre voisins !
Reply

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

Reply

Marsh Posté le 11-02-2011 à 12:49:24    

Ca marche chez moi  [:le colonel moutarde:5]  
 
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...


Message édité par SuppotDeSaTante le 11-02-2011 à 12:50:11

---------------
Soyez malin, louez entre voisins !
Reply

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()
Dim choix, heure, i As Variant
choix = Application.InputBox(prompt:="choisir heure" )
heure = TimeValue(choix)
choix_hh = Hour(heure)
choix_mm = Minute(heure)
choix_ss = Second(heure)
i = 1
      While choix_hh <> Hour(Cells(i, 1)) Or choix_mm <> Minute(Cells(i, 1)) Or choix_ss <> Second(Cells(i, 1)) _
      Or i > 1000
           i = i + 1
      Wend
Cells(i, 1).Select
End Sub

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.

Reply

Marsh Posté le 11-02-2011 à 14:20:46    

Reply

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é ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed