Verrouiller les samedis, dimanches et jours fériés en VBA

  • Initiateur de la discussion Initiateur de la discussion natorp
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

natorp

XLDnaute Barbatruc
Bjr à toutes et tous

Dans le but de ne pas pouvoir changer la couleur des samedis, dimanches et fériés, est-il possible de verrouiller les cellules qui contiennent un samedi, ou un dimanche ou un jour férié en VBA ?
Ensuite je protègerai le fichier.

Merci de votre aide, cordialement, Gérard
 
Dernière édition:
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Re,

je viens de changer de fichier, car il n'est pas possible de modifier une partie de matrice, j'ai refait le tableau avec des formules simples..

merci de votre aide, cordialement, Gérard
 

Pièces jointes

Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Bonjour Gérard,

Salut kjin, heureux de te croiser, tu te fais rare 🙂

Le problème posé me paraît être un faux problème puisque les couleurs sont appliquées par MFC 😕

A+
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Job,

Merci de passer par là. Je souhaite verrouiller ces cellules car la personne qui va s'en servir doit colorier en vert les cellules pour lesquelles elle est en absence. Et à l'aide d'une fonction, je compte ces jours là. Or, même si la couleur ne change pas à l'écran, si elle mets du vert sur un férié ou un WE, le compteur d'absence sera faux.

Merci de votre aide, cordialement, Gérard
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Bonjour,
Salut kjin, heureux de te croiser, tu te fais rare 🙂
Merci Job, toujours aussi sympa🙂

Gérard, on peut reprendre les conditions de la MFC...
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [B4:M34]) Is Nothing Then
    If Weekday(Target, 2) > 5 Or Application.CountIf([Feries], Target) > 0 Then [A1].Activate
End If
End Sub
...qui empêche de sélectionner une cellule contenant un jour férié ou we
A+
kjin
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Re,

Cette macro verrouille les cellules qui sont colorées par la MFC, interdit leur sélection, et permet le formatage des cellules déverrouillées :

Code:
Sub Verrouille()
Dim a$, fer As Range, i As Byte, j As Byte, c As Range
a = "2013"
Set fer = Evaluate("Fériés" & a)
With Sheets(a).[B4:M34]
  .Parent.Unprotect "TOTO" 'mot de passe à adapter
  .Locked = False 'déverrouillage
  For i = 1 To 31
    For j = 1 To 12
      Set c = .Cells(i, j)
      If Month(c) <> j Or Application.CountIf(fer, c) _
        Or Weekday(c, 2) > 5 Then c.Locked = True
    Next
  Next
  .Parent.Protect "TOTO", AllowFormattingCells:=True
  .Parent.EnableSelection = xlUnlockedCells
End With
End Sub
Mot de passe TOTO à adapter.

Edit : pardon kjin, pas rafraîchi, eh oui avec une SelectionChange inutile de protéger la feuille...

A+
 
Dernière édition:
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Re

Merci kjin, mais cette partie du code se met en erreur dès que je sélectionne une cellule de la zone :

Code:
If Weekday(Target, 2) > 5 Or Application.CountIf([Fériés], Target) > 0 Then
"Incompatibilité de type"

cordialement, Gérard
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Merci Job

effectivement on ne peut pas sélectionner les WE et fériés directement, sauf en les incluant dans une sélection et du coup ça marche plus:
si on sélectionne D4😀11 et que l'on met la couleur "vert", et bien avec la fonction de comptage couleur, on trouve : 8 au lieu de 6.

Merci pour votre aide, cordialement, Gérard
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Kjin,

j'ai trouvé d'où vient le problème, le nom du champ pour les fériés : [Fériés2013]
Mais du coup j'ai un peu le même problème qu'avec Job, lorsque je sélectionne une zone (par exemple B5:B6), j'ai une "incompatibilité de type" sur la ligne précédemment citée.

Merci pour votre aide, cordialement, Gérard
 
Re : Verrouiller les samedis, dimanches et jours fériés en VBA

Re,

Oui je n'avais pas testé, donc ma solution est à rejeter.

Utilise donc cette SelectionChange :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [B4:M34])
If Not r Is Nothing Then
  For Each r In r
    If Weekday(r, 2) > 5 Or Application.CountIf([Fériés2013], r) _
      Or Month(Cells(4, r.Column)) <> Month(r) Then [A1].Select: Exit Sub
  Next
End If
End Sub
Edit : j'avais introduit inutilement Me.UsedRange.

A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
456
Réponses
8
Affichages
583
Retour