Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2955 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA excel] problème inputbox et heure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA excel] problème inputbox et heure

n°2056000
bloodnico
Posté le 11-02-2011 à 10:17:20  profilanswer
 

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
 
 
 

mood
Publicité
Posté le 11-02-2011 à 10:17:20  profilanswer
 

n°2056025
billgatesa​nonym
Posté le 11-02-2011 à 11:19:15  profilanswer
 

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

n°2056026
SuppotDeSa​Tante
Aka dje69r
Posté le 11-02-2011 à 11:21:07  profilanswer
 

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 !
n°2056065
bloodnico
Posté le 11-02-2011 à 12:12:51  profilanswer
 

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

n°2056077
SuppotDeSa​Tante
Aka dje69r
Posté le 11-02-2011 à 12:49:24  profilanswer
 

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 !
n°2056084
billgatesa​nonym
Posté le 11-02-2011 à 13:08:39  profilanswer
 

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.

n°2056103
SuppotDeSa​Tante
Aka dje69r
Posté le 11-02-2011 à 14:20:46  profilanswer
 
n°2056168
bloodnico
Posté le 11-02-2011 à 16:37:32  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA excel] problème inputbox et heure

 

Sujets relatifs
[AS2] Problème fonctionnement fonction hitTest [RESOLU !][VBA Excel] Références manquantes [Résolu]
Probleme de jointure sur une seule table sql[VBA Excel] Copie de données d'un fichier vers un autre
Validation XML en Java - Problème de namespaceMacro Excel recherche fichiers et copie [RESOLU]
zone cliquable avec liens probleme dans IE et Operaprobleme avec un distinct
Plus de sujets relatifs à : [VBA excel] problème inputbox et heure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR