XL 2016 VBA horaire equipe

julien741

XLDnaute Nouveau
Bonjour,

Je souhaiterais réaliser un code VBA pour mettre la date et l'équipe dans une cellule, voici ce que j'ai fais qui fonctionne mais avec un petit soucis :
If Hour(Now) >= 13 And Hour(Now) <= 21 Then
Range("G6").Value = "Après-midi"
End If
If Hour(Now) >= 21 And Hour(Now) <= 5 Then
Range("G6").Value = "Nuit"
End If
If Hour(Now) >= 5 And Hour(Now) <= 13 Then
Range("G6").Value = "Matin"
End If

Pour l'équipe du matin et de l'après-midi c'est bon mais pour l'équipe de nuit j'ai un soucis dans la date et/ou heure.
Les équipes fonctionnent du lundi matin au samedi matin
L'analyse de production est sur 1 jour = lundi matin 5h-13h , lundi après-midi 13h-21h et lundi nuit 21h-5h (le 5h tombe sur le mardi matin pour Excel)
Ce que je souhaite c'est dire que le 5h du matin du mardi est la date du lundi (ou le l'aveil) et équipe de nuit, mais cela ce fasse pour tous les jours de la semaine.
Et que pour le vendredi on est vendredi matin, vendredi après-midi et vendredi nuit 21-5h (5h du matin du samedi)

J'espère que ce que j'explique est claire.

Merci par avance de votre aide.

Cdt.
Julien.
 
Solution
Bonjour,

Vous testez l'heure mais vous prenez la date + l'heure contenue dans Now().
Testez directement l'heure.

Dans votre code :
If Hour(Now) >= 13 And Hour(Now) <= 21 Then
Puis :
If Hour(Now) >= 21

21 heures est à la fois de l'après-midi ET de la NUIT ce qui est un non sens pour vba

Voyez ci-dessous avec un select case.

VB:
Sub test()
    Dim res As String
    ' testez avec des timevalue pour remplacer time
    Select Case Hour(Time)
    Case 0 To 4, 21 To 23: res = "Nuit"
    Case 5 To 12: res = "Matin"
    Case 13 To 20: res = "Après-midi"
    End Select
    Debug.Print res
    'Range("G6") = res
End Sub

Dans votre code avec des if...endif successifs, toutes les conditions sont toujours évaluées même si la première est...

Phil69970

XLDnaute Barbatruc
Bonjour @julien741

Pas sur d'avoir tout compris....

Je te propose ceci :

VB:
Select Case Hour(Now)
Case 13 To 21
    Range("G6").Value = "Après-midi"
    VarDate =Now

Case Is > 21 '0 To 5, Is > 21
    Range("G6").Value = "Nuit"
    VarDate =Now

'********* '
Case 0 To 5
    Range("G6").Value = "Nuit"
    Hour (Now - 1              'Voir observation
    VarDate =Now - 1           'Voir observation

'********

Case 5 To 13
    Range("G6").Value = "Matin"
   VarDate =Now

End Select


*Observation :
Hour (Now - 1)
'En fait je ne pense pas que tu souhaites cela, tu veux si j'ai compris que si c'est entre 0 et 5 alors on est encore la veille au niveau des équipes de 3*8 et donc de la date

Mais on a pas le reste du code il suffit de rajouter une variable style ==> VarDate =Now - 1 que tu peux gérer dans le reste de ton code ;)
Ou bien VarDate =Now quand la date est bonne

*Merci de ton retour

@Phil69970
 

julien741

XLDnaute Nouveau
Bonjour Phil,

Merci pour ton retour, je vais essayer de mettre le code et aussi de modifier par Hour (Now-1) et je te redit demain si cela fonctionne.

Mais oui l'idée est de faire en sorte que l'équipe de nuit exemple lundi qui enregistre le mardi matin à 5h la prod reste sur la date du lundi.
et cela idem pour les autres jour de la semaine.

Pour le reste du code, je ne sais pas si il peut servir car je pars après cela sur l'enregistrement des données.

Cdt.

Julien.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Vous testez l'heure mais vous prenez la date + l'heure contenue dans Now().
Testez directement l'heure.

Dans votre code :
If Hour(Now) >= 13 And Hour(Now) <= 21 Then
Puis :
If Hour(Now) >= 21

21 heures est à la fois de l'après-midi ET de la NUIT ce qui est un non sens pour vba

Voyez ci-dessous avec un select case.

VB:
Sub test()
    Dim res As String
    ' testez avec des timevalue pour remplacer time
    Select Case Hour(Time)
    Case 0 To 4, 21 To 23: res = "Nuit"
    Case 5 To 12: res = "Matin"
    Case 13 To 20: res = "Après-midi"
    End Select
    Debug.Print res
    'Range("G6") = res
End Sub

Dans votre code avec des if...endif successifs, toutes les conditions sont toujours évaluées même si la première est vraie.

Avec des if la structure serait plutôt.

Code:
If Condition Then
  ' Action quand Condition  est vraie
  '
ElseIf Condition2 Then
  ' Action quand Condition 2  est vraie
  '
ElseIf Condition3 Then
 ' Action quand Condition 3  est vraie
 '
ElseIf Condition4 Then
 ' Action quand Condition 4 est vraie
 '
Else 'Non obligatoire
 ' Action quand aucune des conditions précédentes n'est vraie
 End If

Dès qu'une condition est remplie l'action est exécutée et les autres conditions ne sont pas évaluées.

cordialement

[Edit]Oups avait pas vu @Phil69970 :)[/Edit]
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
3 K

Statistiques des forums

Discussions
312 108
Messages
2 085 380
Membres
102 876
dernier inscrit
BouteilleMan