Je ne serai que le 12 millionième à poser ce genre de question...... J'ai besoin d'un select case basé sur une variable "Heure" pour déterminer où écrire une valeur. Donc, j'ai pondu ça :
VB:
Dim Heure As Date
Dim Colonne As String
Dim DerLig As Long, Ligne As Long
DerLig = Feuil1.Range("A" & Feuil1.Cells.Rows.Count).End(xlUp).Row
Ligne = Application.Match(CLng(Date), Feuil1.Range("B1:B" & DerLig).Value2, 0)
Heure=Time 'Première version
Heure = TimeValue(Hour(Time) & ":" & Minute(Time) & ":" & Second(Time)) 'Deuxième version
Select Case Heure
Case Is >= TimeValue("07:00:00") And Heure < TimeValue("11:59:59")
Colonne = "C"
Case Is >= TimeValue("12:00:00") And Heure < TimeValue("13:59:59")
Colonne = "D"
Case Is >= TimeValue("14:00:00") And Heure < TimeValue("16:59:59")
Colonne = "E"
Case Is >= TimeValue("17:00:00") And Heure < TimeValue("19:59:59")
Colonne = "F"
Case Else
End Select
Il est plus de 12h, pourtant je passe toujours par le premier case et quand je regarde les valeurs :
il semble bien que mon Heure est supérieure à 11:59:59........
En pas à pas si je force le passage dans le deuxième case, il exécute le code. PAr contre, si je force pour le troisème case, il ne passe pas dedans ?????
Problème entre la chaise et l'écran ???
Merci d'avance !
Bonjour.
Heure < TimeValue("11:59:59") est False ce qui équivaut à 0 si on tente de l'utiliser comme nombre.
TimeValue("07:00:00") And 0 = 0 donc,
et Heure est bien supérieur ou égal à 0.
Vous ne devriez pas essayer de tester les bornes de fin, ça complique inutilement.
Testez simplement ça :
Bonjour Thierry,
11:59:59 ne passe nulle part car :
1- Case Is >= TimeValue("07:00:00") And Heure < TimeValue("11:59:59")
Il n'est pas dedans puisque c'est <11:59:59
2-Case Is >= TimeValue("12:00:00") And Heure < TimeValue("13:59:59")
Il n'est pas dedans car <12:00:00
Peut être en changeant la première ligne avec :
Case Is >= TimeValue("07:00:00") And Heure < TimeValue("12:00:00")
et idem sur les autres lignes :
VB:
Select Case Heure
Case Is >= TimeValue("07:00:00") And Heure < TimeValue("12:00:00")
Colonne = "C"
Case Is >= TimeValue("12:00:00") And Heure < TimeValue("14:00:00")
Colonne = "D"
Case Is >= TimeValue("14:00:00") And Heure < TimeValue("17:00:00")
Colonne = "E"
Case Is >= TimeValue("17:00:00") And Heure < TimeValue("20:00:00")
Colonne = "F"
Case Else
End Select
Bonjour.
Heure < TimeValue("11:59:59") est False ce qui équivaut à 0 si on tente de l'utiliser comme nombre.
TimeValue("07:00:00") And 0 = 0 donc,
et Heure est bien supérieur ou égal à 0.
Vous ne devriez pas essayer de tester les bornes de fin, ça complique inutilement.
Testez simplement ça :
Bernard
J'ai vu ton commentaire mais je ne comprends pas pourquoi ceci fonctionne bien
If Time >= "12:00:00" And Time < "18:00:00" Then
MsgBox Time ' il est 16h30 donc la condition se fait logiquement
End If
If Time >= "12:00:00" And Time < "14:00:00" Then
MsgBox Time ' il est 16h30 donc la condition ne se fait pas logiquement
End If
MsgBox Hour(Time) ' ==> il est 16h30 donc 16 s'affiche logiquement
Select Case Hour(Time) 'Aucun select case fonctionne
Case Hour(Time) >= 12 And Hour(Time) < 14
Colonne = "x"
Case Hour(Time) >= 14 And Hour(Time) < 18
Colonne = "y"
End Select
Bonsoir Dranreb,
Comme quoi écrire des macros qui tiennent la route, c'est un vrai métier ! Votre proposition paraît tellement simple.... J'ai juste eu à baser mon Select sur la colonne et hop, tout roule.
Ça ne fonctionne pas parce que quand on écrit Case Is >= expression c'est comme si avant le SelectCase on avait fait Q = Expression et dans le Select case on Met Case Is >= Q.
Si on veut être un peu plus libre dans les expression il faut prendre Select Case True. Alors seulement on peut mettre des Case suivi d'expressions Boolean normales.
Merci Bernard pour l'explication c'est vrai que je ne pense jamais à mettre Select Case True
VB:
Select Case True '==> fonctionne il est 18h15
Case Hour(Time) >= 12 And Hour(Time) < 14
Colonne = "x"
Case Hour(Time) >= 14 And Hour(Time) < 22 'la condition fonctionne ici
Colonne = "y"
End Select