XL 2016 exclure des dates d'une propagation

halecs93

XLDnaute Impliqué
Bonjour,

Grâce à Sylvanu, j'ai pu grandement faire évoluer mon fichier.

Un simple clic et voilà que la semaine type, dans un planning, se propage sur toute l'année.

Je n'arrive pas à en exclure les dates qui se trouvent dans deux plages de données Vac et Fer.

Merci beaucoup
 

Pièces jointes

  • HEURES TITULAIRES - modele v5.xlsm
    305.5 KB · Affichages: 2
Solution
Oups.
VB:
For Each F In Worksheets
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            For L = 9 To 39             ' Efface si jour chomé.
                MaDate = .Cells(L, "A")...

halecs93

XLDnaute Impliqué
re... du coup, j'ai réussi à faire un bricolage.... en exécutant 2 macros, l'une à la suite de l'autre. Mais je trouve cela laborieux. Peux mieux faire ;)

Sans doute quelqu'un trouvera une meilleure solution

Merci à tout le monde
 

Pièces jointes

  • HEURES TITULAIRES - modele v6 test.xlsm
    315.9 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
Bonjour halecs93
Pas évident de s'y retrouver un beau fichier dont tu maitrise l'utilisation pas pas Nous Lol
Pourrais-tu être plus explicite et Nous expliquer ce que tu veux par l'exemple, l'explication.
Quelles sont les Macros etc etc...
une première proposition pourquoi trois Boucles ?
VB:
Sub Propager()
    Application.ScreenUpdating = False
    Dim F As Worksheet
    For Each F In Worksheets
        With F 'avec la feuille
                 .Unprotect 'Ici Déprotection de la feuille
        If .Name <> "DONNEES" And .Name <> "BIENVENUE" And .Name <> "CONGÉS" And _
                    .Name <> "RECAPITULATIF" And .Name <> "FICHE INFOS CONTRAT" And .Name <> "CALCULS" Then
            ' Vos opérations
                DL = .Cells(39, "B").Row

                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            End With
        End If
          .Protect 'Ici  ' Protection de toutes les feuilles
       End With
    Next F
End Sub
Bonne Journée
Jean marie
 
Dernière édition:

halecs93

XLDnaute Impliqué
Bonjour halecs93
Pas évident de s'y retrouver un beau fichier dont tu maitrise l'utilisation pas pas Nous Lol
Pourrais-tu être plus explicite et Nous expliquer ce que tu veux par l'exemple, l'explication.
Quelles sont les Macros etc etc...
une première proposition pourquoi trois Boucles ?
VB:
Sub Propager()
    Application.ScreenUpdating = False
    Dim F As Worksheet
   'supprimer'
    ' Déprotection de toutes les feuilles
    ' For Each F In Worksheets
    '    F.Unprotect
    ' Next F

    For Each F In Worksheets
                F.Unprotect 'Ici Déprotection de toutes les feuilles
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            End With
        End If
          F.Protect 'Ici  ' Protection de toutes les feuilles
    Next F
' supprimer
    ' Protection de toutes les feuilles
    'For Each F In Worksheets
    '    F.Protect
    ' Next F
End Sub
Bonne Journée
Jean marie
Dans un premier temps, merci pour vous être penché sur mon fichier...bricolé.

En ce qui concerne cette propagation, le but serait d'éviter de propager lorsque les jours sont en période de vacances (Vac) ou fériés (Fer).

Grâce à Sylvanu, la propagation a pu se faire... c'est ensuite que je n'ai pas réussi proprement...
 

ChTi160

XLDnaute Barbatruc
Re
ça , c'était très Clair et j'avais compris Lol
En ce qui concerne cette propagation, le but serait d'éviter de propager lorsque les jours sont en période de vacances (Vac) ou fériés (Fer).
je pense que Sylvanu (que je salue !) va passer par ici !
Grâce à Sylvanu, la propagation a pu se faire... c'est ensuite que je n'ai pas réussi proprement...
Bonne Journée
Jean marie
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Halecs, Chti,
Ce fichier est devenu une vrai usine à gaz. Il est difficile de s'y retrouver.
Un essai en PJ où j'ai juste modifie Propager avec :
VB:
    For Each F In Worksheets
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            End With
            For L = 9 To 39             ' Efface si jour chomé.
                MaDate = .Cells(L, "A")
                If Application.WorksheetFunction.CountIf(wsDonnees.Range("B2:B14"), MaDate) > 0 Or _
                    Application.WorksheetFunction.CountIf(wsDonnees.Range("D3:I33"), MaDate) > 0 Then
                    .Range("B" & L & ":N" & L).ClearContents
                End If
            Next L
        End If
    Next F
Mais incapable de véritablement teste.
 

Pièces jointes

  • HEURES TITULAIRES - modele v6 test (2).xlsm
    313.4 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ceci dit, pour la gestion des jours de classe, le fichier de FredMa me semble beaucoup plus simple à gérer :
( voir fichier post #10 ... car ensuite le fichier se complique )
 

halecs93

XLDnaute Impliqué
Bonjour Halecs, Chti,
Ce fichier est devenu une vrai usine à gaz. Il est difficile de s'y retrouver.
Un essai en PJ où j'ai juste modifie Propager avec :
VB:
    For Each F In Worksheets
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            End With
            For L = 9 To 39             ' Efface si jour chomé.
                MaDate = .Cells(L, "A")
                If Application.WorksheetFunction.CountIf(wsDonnees.Range("B2:B14"), MaDate) > 0 Or _
                    Application.WorksheetFunction.CountIf(wsDonnees.Range("D3:I33"), MaDate) > 0 Then
                    .Range("B" & L & ":N" & L).ClearContents
                End If
            Next L
        End If
    Next F
Mais incapable de véritablement teste.
Hello et merci.

je rencontre une "Erreur de compilation - Référence incorrecte ou non qualifiée" concernant Cells à la ligne MaDate = .Cells(L, "A")
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oups.
VB:
For Each F In Worksheets
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            For L = 9 To 39             ' Efface si jour chomé.
                MaDate = .Cells(L, "A")
                If Application.WorksheetFunction.CountIf(wsDonnees.Range("B2:B14"), MaDate) > 0 Or _
                    Application.WorksheetFunction.CountIf(wsDonnees.Range("D3:I33"), MaDate) > 0 Then
                    .Range("B" & L & ":N" & L).ClearContents
                End If
            Next L
            End With
        End If
    Next F
MaDate doit être dans le With pour connaitre la feuille parent.
 

halecs93

XLDnaute Impliqué
Oups.
VB:
For Each F In Worksheets
        If F.Name <> "DONNEES" And F.Name <> "BIENVENUE" And F.Name <> "CONGÉS" And F.Name <> "RECAPITULATIF" And F.Name <> "FICHE INFOS CONTRAT" And F.Name <> "CALCULS" Then
            ' Vos opérations
            With F
                DL = .Cells(39, "B").Row
                .Range("B9:N39").ClearContents
                Formule = "=SI(OU($A9=0;$A9="""");"""";INDEX(DONNEES!$F$37:$R$43;JOURSEM($A9;2);COLONNE()-1))"
                .Range(.Cells(9, "B"), .Cells(DL, "N")).FormulaLocal = Formule
                .Range(.Cells(9, "B"), .Cells(DL, "N")) = .Range(.Cells(9, "B"), .Cells(DL, "N")).Value
            For L = 9 To 39             ' Efface si jour chomé.
                MaDate = .Cells(L, "A")
                If Application.WorksheetFunction.CountIf(wsDonnees.Range("B2:B14"), MaDate) > 0 Or _
                    Application.WorksheetFunction.CountIf(wsDonnees.Range("D3:I33"), MaDate) > 0 Then
                    .Range("B" & L & ":N" & L).ClearContents
                End If
            Next L
            End With
        End If
    Next F
MaDate doit être dans le With pour connaitre la feuille parent.
Re... cette fois, ça plantait au niveau de wsDonnees... en effet, dans le code c'est F qui était déclaré comme worksheet. Une petite modif et à priori tout fonctionne parfaitement maintenant. Un grand merci
 

Discussions similaires

Réponses
306
Affichages
25 K
Réponses
2
Affichages
1 K

Statistiques des forums

Discussions
312 207
Messages
2 086 234
Membres
103 162
dernier inscrit
fcfg