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)
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...
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
'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 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.
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.
Merci pour votre aide à tout les deux, j'ai essayé les solutions et elles fonctionnent.
Donc un grand merci, et je vois que j'ai encore pas mal de chose à apprendre en VBA.
Cdt.
Julien.