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

Résolu
PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   -  
PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   -
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



--
C'est en forgeant que l'on devient forgeron. - C'est au pied du mur que l'on voit le maçon - on apprend toujours de ses erreurs

5 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
       
      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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  2. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
      1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835 > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
  3. Maurice
     
    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
    1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
       
      Bonjour

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

      Merci à vous deux
      0
  4. Maurice
     
    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
    1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
       
      Je regarderai vos macros Merci beaucoup
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maurice
     
    Bonjour

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

    A+
    Maurice
    0
    1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
       
      la formule pour le numéro de semaine pour la France

      =No.SEMAINE(C54;21)
      0