Bonjour,Bonsoir Sissi, et bienvenu(e) sur XLD,
Un essai en PJ où j'ai modifié le code de HorlogeEnc3, rajouté un truc dans Thisworkbook, et modifié les formules d'alertes. Le message "C'est l'heure" reste affiché pendant une minute avant de basculer sur "C'est fini".
Option Explicit
Private HOT As Date
Public Sub MàjHeure()
If HOT = 0 Then HOT = Now
Feuil1.Cells(1, "J").Value = HOT
HOT = Int(Now * 1440 + 1.5) / 1440
Application.OnTime HOT, "MàJHeure"
End Sub
Public Sub StopperMàJH()
If HOT = 0 Then Exit Sub
Application.OnTime HOT, "MàJHeure", Schedule:=False
HOT = 0
End Sub
=CHOISIR(SIERREUR(SIGNE(ENT(MOD($J$1;1)*1440)-ENT(G4*1440));-1)+2;"";"🔔 C'est l'heure";"💬 l'heure est passée !")
Bonjour,Bonsoir Sissi, et bienvenu(e) sur XLD,
Un essai en PJ où j'ai modifié le code de HorlogeEnc3, rajouté un truc dans Thisworkbook, et modifié les formules d'alertes. Le message "C'est l'heure" reste affiché pendant une minute avant de basculer sur "C'est fini".
merciBonsoir.
Rien compris à vos explications, sauf :
Pour que la date et l'heure s'actualise toutes les minutes, dans un module standard :
VB:Option Explicit Private HOT As Date Public Sub MàjHeure() If HOT = 0 Then HOT = Now Feuil1.Cells(1, "J").Value = HOT HOT = Int(Now * 1440 + 1.5) / 1440 Application.OnTime HOT, "MàJHeure" End Sub Public Sub StopperMàJH() If HOT = 0 Then Exit Sub Application.OnTime HOT, "MàJHeure", Schedule:=False HOT = 0 End Sub
=SI(ET(D4="";E4="");"";SI(D4="";E4+TEMPSVAL("1:10"); D4+TEMPSVAL("0:40")))
Nickel.Bonjour,
Pour la colonne F testez :
Pour le second point donnez un fichier exemple représentatif pour éviter les tâtonnements.VB:=SI(ET(D4="";E4="");"";SI(D4="";E4+TEMPSVAL("1:10"); D4+TEMPSVAL("0:40")))
Oui, c'est bien ca, les gens vont arriver au fil de l'eau, mais il ne sera possible d'avoir que 28 personnes sur la patinoire. On peut gérer au niveau de la patinoire avec un compteur manuel, mais au niveau de l'entrée on risque de mettre quelqu un pour 30 mn, mais qu'il ne puisse pas entrer de suite...Re,
J'ai regardé pour le point N°2, c'est assez complexe. Par ex on pourrait avoir 4 groupes qui s'inscrivent comme ci dessous à des horaires différents, mais dont un chevauchement temporel dépasserait 28 participants à un certain moment. Par ex :
Regarde la pièce jointe 1156852
Dans ce cas il ne faut pas analyser simplement les horaires entrée/sorties mais les présences.
est ce bien ce que vous voulez ?
On ne peut le faire qu'en VBA, car trop complexe en MFC.
Ou alors dans la colonne G, indiquer "Présent" pour les personnes sur place, et dans une cellule à part compter le nombre "présent" ?Re,
J'ai regardé pour le point N°2, c'est assez complexe. Par ex on pourrait avoir 4 groupes qui s'inscrivent comme ci dessous à des horaires différents, mais dont un chevauchement temporel dépasserait 28 participants à un certain moment. Par ex :
Regarde la pièce jointe 1156852
Dans ce cas il ne faut pas analyser simplement les horaires entrée/sorties mais les présences.
est ce bien ce que vous voulez ?
On ne peut le faire qu'en VBA, car trop complexe en MFC.
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D4:E1000")) Is Nothing Then
Application.ScreenUpdating = False
If Cells(Target.Rows, "A") <> "" And [H3] > 28 Then
MsgBox "Trop de monde. Plus de 28 participants présents."
Target = ""
End If
End If
Fin:
Application.ScreenUpdating = True
End Sub
J'ai testé, mais ca n'a pas l'air de fonctionnerUne approche en PJ.
En colonne H on regarde si la personne est présente. On fait le cumul des présent en H3.
Quand on saisie un nouvel arrivant en colonne D ou E, si le max de 28 est dépassé, on émet une alerte, et on efface la cellule. Avec dans la Feuil1 :
VB:Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Fin: If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("D4:E1000")) Is Nothing Then Application.ScreenUpdating = False If Cells(Target.Rows, "A") <> "" And [H3] > 28 Then MsgBox "Trop de monde. Plus de 28 participants présents." Target = "" End If End If Fin: Application.ScreenUpdating = True End Sub