Verrouiller lignes en fonction d'une DATE

Bonjour à tous,

Avez-vous une solution pour le problème suivant svp?

L'idée serait de verrouiller la saisie des lignes entières de la colonne G à H et de la colonne J à L si la date en H1 est supérieure aux dates de la colonne C. Les autres colonnes sont déjà verrouillées.

Le fichier est verrouillé avec le mot de passe "0000".

Merci d'avance!

23grille-horaire.xlsm (88.34 Ko)

Bonjour Fransez, le forum,

Une proposition....

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim lig%
  If Not Application.Intersect(Target, ActiveSheet.ListObjects("Tableau1").DataBodyRange) Is Nothing Then
   cancel = True
    lig = Target.Row
     If Range("C" & lig) < Range("H1") Then MsgBox "Saisie non autorisée !": Exit Sub
  End If
End Sub

Code à placer dans le module de la feuille concernée.

image

Cordialement,

Merci Xorsankukai pour ton retour!

Cette solution permet bien de bloquer la saisie mais on peut supprimer les heures précédemment saisies.

Avez-vous une solution plus restrictive? L'idée étant que le responsable valide les horaires saisies en les bloquant (saisie/suppression). J'ai proposé une date de validation pour bloquer la saisie mais peut-être qu'il y a une autre solution.

Merci

Re,

Merci pour ce retour,

En fait, elle n’empêche pas non plus le choix dans la liste déroulante,

Désolé, j'ai tenté sans trop de succès un verrouillage des cellules.

Néanmoins, une alternative, pour rester simple:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim lig%, x%
  If Not Application.Intersect(Target, ActiveSheet.ListObjects("Tableau1").DataBodyRange) Is Nothing Then
   cancel = True
    lig = Target.Row: x = Range("C" & Rows.Count).End(xlUp).Row
     Do Until Range("C" & x) <= Range("H1")
      x = x - 1
     Loop
     If Range("C" & lig) < Range("H1") Then MsgBox "Saisie non autorisée !": Range("G" & x).Select: Exit Sub
  End If
End Sub

On se positionne sur la première ligne autorisée....

10grille-horaire.xlsm (97.08 Ko)

Cordialement,

Merci pour la précision

Avec cette approche...

1) déprotéger la feuille
2) parcourir toutes les lignes dont la date est inférieure à H1 et protéger les cellules
3) reprotéger la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
  ' Vérifier si saisi dans les cellules G à H et J à L
  If Not Intersect(Range("G:H,J:L"), Target) Is Nothing Then
    ' Vérifier si la date est inférieure ou non à H1
    If Range("C" & Target.Row) < Range("H1") Then
      Application.EnableEvents = False
      Application.Undo
      Application.EnableEvents = True
      MsgBox "Vous ne pouvez plus rien saisir sur la ligne du : " & vbCr _
        & Format(Range("C" & Target.Row), "dddd d mmmm yyyy"), vbCritical, "OUPS..."
    End If
  End If
End Sub

Bonjour,
Multipost !...

La solution

Private Sub Worksheet_Change(ByVal Target As Range)
 ' Vérifier si saisi en dehors du tableau
  If Target.Row < 5 Then Exit Sub
  ' Vérifier si saisi dans les cellules G à H et J à L
  If Not Intersect(Range("G:H,J:L"), Target) Is Nothing Then
    ' Vérifier si la date est inférieure ou non à I1
    If Range("C" & Target.Row) <= Range("I1") Then
      Application.EnableEvents = False
      Application.Undo
      Application.EnableEvents = True
      MsgBox "Vous ne pouvez plus rien saisir sur la ligne du : " & vbCr _
        & Format(Range("C" & Target.Row), "dddd d mmmm yyyy"), vbCritical, "Horaire validée"
    End If
  End If
End Sub

Merci @xorsankukai pour l'aide

@Jean-Eric merci pour ton commentaire constructif

Rechercher des sujets similaires à "verrouiller lignes fonction date"