VBA boucle pour protéger jour fériés dans fichier joins

Résolu/Fermé
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 - 26 juin 2015 à 19:27
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 - 29 juin 2015 à 12:58
Bonjour,

J'ai ouvert un nouveau sujet pour avoir de l'aide sur Le VBA

J'ai besoin d'aide pour finaliser ce fichier MERCI aux bonnes volontés

Le fichier modifié, il ne reste plus qu'a insérer dans la macro masque de saisie une boucle pour mettre une protection sur les 5 dates mobiles : Pâques dimanche et Lundi, le jeudi de l'ascension et le dimanche et le lundi de Pentecôte suivant la feuille jour fériés
Et enlever cette protection dans la macro montre tout

Les personnes maitrisant le langage VBA vont nous aider

Je joins la dernière version du fichier

http://www.cjoint.com/c/EFAnReQEyEx



A voir également:

5 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 26/06/2015 à 20:25
Bonjour,

mettre une protection sur les 5 dates mobiles
Pas très précis, on va supposer, tu adapteras.
A tester :
Sub verrouFeries()
    Dim c As Range
    With Worksheets("fériés")
        For Each c In Range(.[D3], .[D3].End(xlDown))
            With Sheets(Format(c, "mmmm"))
                .Unprotect "PHILOU"
                If .[E52] = Year(c) Then .[G54].Offset((Day(c) - 1) * 5).Resize(5, 16).Locked = True
                .Protect "PHILOU"
            End With
        Next c
    End With
End Sub 

Je fais tous les fériés, tu peux tester le début de la formule de date =" si tu veux vraiment restreindre aux fêtes mobiles.

eric

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
26 juin 2015 à 21:32
Bonsoir Eriiic

Pour être plus précis dans une feuille mensuelle contrôler les dates colonne C et si la date appartient à la liste des jours fériés, appliquer un format (protection Masquer et verrouiller) sur les cellules de la colonne D à V de cette ligne.
répéter cela sur les douze feuilles mensuelles
Et il faudra une deuxième pour enlever cette protection au moment ou on montre tout

Merci de mettre les détails des actions sur les macros pour que je comprenne bien
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 26/06/2015 à 22:58
Ben ça parle si tu as qq notion d'anglais et puis il n'y a que 2 lignes un peu plus compliquées.
Teste en pas à pas en mettant .activate devant .Unprotect, en remplaçant .Locked = True par .select, fait F1 sur les fonctions inconnues et revient s'il te reste des questions.
eric
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
27 juin 2015 à 09:20
Bonjour Eriiic

J'ai un problème pour passer de janvier au mois suivant la macro bloque sur cette ligne à partir de .[G54]....

If .[E52] = Year(c) Then .[G54].Offset((Day(c) - 1) * 5).Resize(5, 16).Select 'Locked = True

Pouvez-vous détailler cette ligne.

Merci

le lien du fichier

http://www.cjoint.com/c/EFBhtqYzYFx
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 27/06/2015 à 09:57
Bonjour,

C'est quoi ça : ActiveSheet.Unprotect "PHILOU" ?
Il faut :
.Activate
.Unprotect "PHILOU"  'enlever la protection de la feuille


If .[E52] = Year(c) Then .[G54].Offset((Day(c) - 1) * 5).Resize(5, 16).Select 'Locked = True 

<si l'année feuille est correcte, à partir de G54 se décaler de x fois 5 lignes pour être sur le bon jour et sélectionner une plage de 5 lignes, 16 colonnes.
Et tu devrais ajouter au début le déverrouillage complet du mois, sinon si c'est repris d'une année antérieure il y aura des jours verrouillés à tort.

eric
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795 > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
27 juin 2015 à 12:37
Pour .Activate je ne t'avais compris donc j'ai fais une bétise
Pour le déverrouillage il est fait sur la même année puisse qu'on ne peut pas changer l'année sans passer par la Macro montre tout dans laquelle j'ai ajouté ton VBA
et mis en Locked= false
Merci beaucoup pour ton aide
0
Bonjour

Voila une macro pour bloquer les jours ferier

Sub Test()
Onglet = Array(Feuil1.Name, Feuil2.Name, Feuil3.Name, Feuil4.Name, Feuil5.Name, Feuil6.Name, _
            Feuil7.Name, Feuil8.Name, Feuil9.Name, Feuil10.Name, Feuil11.Name, Feuil12.Name)
   For TT = LBound(Onglet) To UBound(Onglet)
      Sheets(Onglet(TT)).Select
      ActiveSheet.Unprotect Password:="PHILOU"
         Range("G54:V208").Locked = False
         For L = 54 To 208 Step 5
            MaDate = Range("C" & L).Value
               For Each Cell In Feuil14.Range("D3:D15")
                  If MaDate = CDate(Cell.Value) Then
                     Range("G" & L & ":V" & L + 4).Locked = True
                  End If
               Next
         Next
      ActiveSheet.Protect Password:="PHILOU"
   Next
Sheets(Onglet(0)).Select
End Sub


A+
Maurice
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
27 juin 2015 à 19:23
Bonjour

Oui cela fonctionne, comme pour Eriiic j'ai étendu le champ de D54 à V208 tout est Ok

Merci à vous deux
0
Re
j'ais modifier aussi tes macro
Sub MontreTout()
Onglet = Array(Feuil1.Name, Feuil2.Name, Feuil3.Name, Feuil4.Name, Feuil5.Name, Feuil6.Name, _
            Feuil7.Name, Feuil8.Name, Feuil9.Name, Feuil10.Name, Feuil11.Name, Feuil12.Name)
   For TT = LBound(Onglet) To UBound(Onglet)
      Sheets(Onglet(TT)).Select
         ActiveSheet.Unprotect Password:="PHILOU"
         ActiveWindow.FreezePanes = False
         Cells.Select
         Selection.EntireColumn.Hidden = False
         Selection.EntireRow.Hidden = False
      Application.Goto Range("A51"), True
   Next
Sheets(Onglet(0)).Select
End Sub

Sub MasqueSaisie()
Onglet = Array(Feuil1.Name, Feuil2.Name, Feuil3.Name, Feuil4.Name, Feuil5.Name, Feuil6.Name, _
            Feuil7.Name, Feuil8.Name, Feuil9.Name, Feuil10.Name, Feuil11.Name, Feuil12.Name)
   For TT = LBound(Onglet) To UBound(Onglet)
       Sheets(Onglet(TT)).Select
         ActiveSheet.Unprotect Password:="PHILOU"
            Columns(1).EntireColumn.Hidden = True
            Columns(3).EntireColumn.Hidden = True
         Application.Goto Range("A51"), True
            Range("A54").Select
            ActiveWindow.FreezePanes = True
         ActiveSheet.Protect "PHILOU"
   Next
Sheets(Onglet(0)).Select
End Sub

ça peux te servire
A+
Maurice
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
27 juin 2015 à 21:09
Je regarderai vos macros Merci beaucoup
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

voila le fichier modifier
avec No.semaine
http://www.cjoint.com/c/EFDjdT8iz0I

A+
Maurice
0
PHILOU10120 Messages postés 6367 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 2 avril 2024 795
29 juin 2015 à 12:58
la formule pour le numéro de semaine pour la France

=No.SEMAINE(C54;21)
0