Colorer une cellule si modifiée entre 2 heures

Bonjour!

1/J'aimerais programmer une cellule sheets afin qu'elle se colore si elle est modifiée par un utilisateur entre 16h30 et 9h30 le lendemain;

Pourriez vous me dire comment je dois faire?

2/Est-il possible de vérouiller une feuille afin qu'elle soit en lecture seule uniquement dans ce créneau ?

3/Est il possible de créer un bouton reset sur la dernière feuille afin de retrouver l'état vierge initial du document?

merci beaucoup !!

Bastien

bonjour, bonsoir,

1/ pour colorer une cellule d'une feuille entre 16:30 et 09:30

mettre ce code dans le module de la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
    If time() > TimeValue("16:30:00") Or time() < TimeValue("09:30:00") Then
        Target.Interior.Color = vbRed
    End If
End Sub

2/ pour verrouiller une feuille entre 16:30 et 09:30

mettre ce code dans le module du classeur (ThisWorkbook)

Private Sub Workbook_Open()
    Dim ws As Object
    Set ws = Sheets("sheet2")
    protectunprotect ws
End Sub

Private Sub Workbook_SheetActivate(ByVal sh As Object)
    Dim ws As Object
    Set ws = Sheets("sheet2")
    protectunprotect ws
End Sub

Sub protectunprotect(sh As Object)
    If Now() > TimeValue("16:30:00") Or Now() < TimeValue("09:30:00") Then
        sh.Protect Password:="123"
    Else
        sh.Unprotect Password:="123"
    End If
End Sub

3/ c'est possible, la macro dépend de ce que l'on appelle "l'état vierge du document" !

Salut h2so4 !

Trop cool , grand merci pour ta réponse rapide et précise, ça a l'air si simple pour toi !

Reste à trouver où je dois coller ce code

grand merci à toi !

a mon avis, il faut utiliser un application.ontime pour les moments 16:30 et 9:30. S'on ne change pas de feuille, rien ne se passe ...

bonjour, Hallo, Bsalv,

a mon avis, il faut utiliser un application.ontime pour les moments 16:30 et 9:30. S'on ne change pas de feuille, rien ne se passe ...

correct, mais la demande précise est "J'aimerais programmer une cellule sheets afin qu'elle se colore si elle est modifiée par un utilisateur entre 16h30 et 9h30 le lendemain;

Bonjour à tous,

h2so4, Now() inclu le jour.
Je pense qu'il faudrait prendre sa partie décimale pour le test avec TimeValue.
eric

@ eriiic, bonjour

h2so4, Now() inclu le jour.

Je pense qu'il faudrait prendre sa partie décimale pour le test avec TimeValue.

correct ! bien vu et c'est corrigé. Super Merci pour cette intervention judicieuse.

Merci les gars de vous intéresser à mon problème!

J'ai l'impression que ce code fonctionne pour excel mais pas pour sheets ... Pouvez vous me donner la démarche à effectuer (avec correction que vous venez de trouver) pour que ça fonctionne sur sheets ?

Je le colle dans apps script ?

Comme ça ?

function myFunction() {

Private Sub Workbook_Open()
    Dim ws As Object
    Set ws = Sheets("LUNDI")
    protectunprotect ws
End Sub

Private Sub Workbook_SheetActivate(ByVal sh As Object)
    Dim ws As Object
    Set ws = Sheets("LUNDI")
    protectunprotect ws
End Sub

Sub protectunprotect(sh As Object)
    If Now() > TimeValue("16:30:00") Or Now() < TimeValue("09:30:00") Then
        sh.Protect Password:="123"
    Else
        sh.Unprotect Password:="123"
    End If
End Sub

}

Mod(Now(),1) ?
Rhooo, pas bien réveillé toi
Plutôt Now() Mod 1 en vba, mais chez moi il me le met en Variant/Long (?!?), pas terrible.
Au final je me dis que Time serait de bon aloi

@ Eriiic

Rhooo, pas bien réveillé toi

c'est vrai !

@ bastguitar,

sheets ne connait pas vba. Comme quoi cela fait un moment que je ne suis pas réveillé, je viens de voir que c'est indiqué dans ta demande et dans ton profil. Si tu as des questions/demandes relatives à sheets, c'est mieux de les poser dans le forum google sheets (3eme forum sur ce site) et non excel

Ok donc je ne peux pas faire ce que je voudrais dans sheets ?

Si je refais le tableur avec excel avec le code et que je le converti en format sheets ça ne fonctionnera pas ?

Bonjour,

cela doit être faisable, mais dans un autre langage (javascript for sheets). Si tu as des questions/demandes relatives à sheets, c'est mieux de les poser dans le forum google sheets (3eme forum sur ce site) et non excel

Merci pour ton éclairage et ta disponibilité.

Je vais reposer ma question dans le bon forum!

je pensais que j'avais ajouté des codes hier, donc non, voilà ...

@H2SO4, c'est une reponse sur la 2ième question "2/Est-il possible de vérouiller une feuille afin qu'elle soit en lecture seule uniquement dans ce créneau ?"

mais comme c'est pour sheets, cela ne sert à rien.

dans thisworkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     fin
End Sub

Private Sub Workbook_Open()
     Interval
End Sub

dans un module

Public dNext

Sub Interval()
     fin
     dTime = CDbl(Time)
     b = (WorksheetFunction.Median(TimeValue("9:30:00"), TimeValue("16:29:59"), dTime) = dTime)     'TRUE = maintenant entre 9:30 et 16:30
     Set sh = Sheets("blad1")
     If b Then sh.Unprotect Else sh.Protect

     moment1 = Date + TimeValue("9:30:00") - (dTime >= TimeValue("9:30:00"))     'prochain moment 9:30
     moment2 = Date + TimeValue("16:30:00") - (dTime >= TimeValue("16:30:00"))     'prochain moment 16:30
     dNext = Application.Min(moment1, moment2)     'le plus petit des 2
     Application.OnTime dNext, "interval", , 1     'moment pour changer la protection

End Sub

Sub fin()
     On Error Resume Next
     Application.OnTime dNext, "interval", , 0
End Sub
Rechercher des sujets similaires à "colorer modifiee entre heures"