XL 2013 MFC week end

  • Initiateur de la discussion Initiateur de la discussion minimutch
  • 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 !

Re : MFC week end

Re

Je n'avais pas ouvert les exemples fournis 🙁
A bien y regarder la solution de JHA est la plus simple à mettre en oeuvre, ce qui n'enlève rien à la proposition de Job 🙂
Cela fera trois méthodes pour un seul résultat.....
(si minimutch reviens par ici.... Sait on jamais.... )

Cordialement
 
Re : MFC week end

Re
Est-il si difficile de faire un exemple pour que l'on puisse s'appuyer sur du concret ?... ...Voir ou tu en es? ....
P.S Je pense que tu n'as pas compris que les intervenants sont bénévoles, et que rien n'est ni urgent, ni inné.
Cordialement
 
Re : MFC week end

J'ai repris le tien que tu as modifié qui se trouve plus haut. Je n'ai pas fait de chgt car je le trouvais bien comme tu as fait. Je veux juste rajouter les jrs fériés. mais je te l'envoie qd même.
Je ne suis pas pressé au point mais comme c'est pour le TAF et que j'y suis actuellement. Voilà mais merci bcp de votre aide
 

Pièces jointes

Re : MFC week end

Re
C'est tellement plus simple avec du concrêt...
J'ai modifié la zone nommée Feries; il ne faut qu'une colonne pour faciliter les choses.
La formule de mise en forme devient plus longue:
=OU(JOURSEM(DATE($A$1;MOIS(MAX($B$1:B$1));MAX(A$4:B$4));2)>5;NB.SI(Feries;DATE($A$1;MOIS(MAX($B$1:B$1));MAX(A$4:B$4)))>0)
Cordialement
 

Pièces jointes

Dernière édition:
Re : MFC week end

Bonjour minimutch, JHA, Efgé,

Ton fichier est fort mal monté.
Les cellules fusionnées ne sont que sources de problèmes.

En fait minimutch désire certainement pouvoir travailler sur plusieurs années, il suffit de compléter le fichier.

Quant aux cellules fusionnées, au contraire elles me sont utiles 🙄

Voyez le fichier joint qui va de 2010 à 2030 avec ce code :

Code:
Private Sub ComboBox1_GotFocus()
ComboBox1.List = Array(2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, _
  2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030)
ComboBox1.Width = [A1].Width
End Sub

Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 Then [A1] = Val(ComboBox1)
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim an As Range, ncol%, r As Range, deb%, i%, ferie As Range
Set an = [A1]
If Intersect(Target, an) Is Nothing Then Exit Sub
If Val(CStr(an)) < 2010 Then an = Year(Date)
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'pour la fusion des cellules
With [B6:ABE58] '58 à adapter au nombre de noms
  ncol = .Columns.Count
  '---RAZ des bordures---
  Set r = .Columns(2)
  For i = 4 To ncol Step 2
    Set r = Union(r, .Columns(i))
  Next
  r.Borders(xlEdgeRight).Weight = xlHairline
  '---semaines, création et bordures fines---
  .Rows(-2).UnMerge 'défusionne
  .Rows(-2) = "=""SEM ""&WEEKNUM(R[2]C,2)"
  .Rows(-2) = .Rows(-2).Value
  deb = 1
  For i = 2 To ncol + 1
    If .Cells(-2, i) <> .Cells(-2, i - 1) Then
      Set r = .Cells(-2, deb).Resize(, i - deb)
      r.Merge 'fusionne
      r.HorizontalAlignment = xlCenter
      If i < ncol + 1 Then r.Borders(xlEdgeRight).Weight = xlThin
      With Intersect(r.EntireColumn, .Cells)
        .Borders(xlEdgeRight).Weight = xlThin
      End With
      deb = i
    End If
  Next
  '---bordures épaisse des mois---
  For Each r In .Rows(-4).SpecialCells(xlCellTypeConstants)
  Intersect(r.MergeArea.EntireColumn, .Cells).Borders(xlEdgeRight).Weight = xlThick
  Next
  '---effacement des couleurs---
  .Interior.ColorIndex = xlNone
  '---coloration des week-ends---
  Set r = Nothing
  For i = 1 To ncol
    If Weekday(.Cells(0, i), 2) > 5 Then _
      Set r = Union(IIf(r Is Nothing, .Columns(i), r), .Columns(i))
  Next
  r.Interior.ColorIndex = 15 'gris
  '---coloration des jours fériés---
  Set ferie = [Feries].Columns(an - 2008)
  Set r = Nothing
  For i = 1 To ncol
    If Application.CountIf(ferie, .Cells(0, i)) Then _
      Set r = Union(IIf(r Is Nothing, .Columns(i), r), .Columns(i))
  Next
  r.Interior.ColorIndex = 38 'rose
  '---affichage/masquage du 29 février---
  .Columns(119).Resize(, 2).ColumnWidth = IIf(IsDate("29/2/" & an), 1, 0.1)
  '---Cadrage---
  i = IIf(Year(Date) = an, Application.Match(Format(Date, "mmmm"), .Rows(-4), 0), 1)
  Application.Goto .Cells(-4, i), True
  .Cells(-1, i).Select
End With
End Sub
Voyez bien les formules en ligne 5 (à masquer), particulièrement B5-C5 (janvier) et DR5 (reformulation au 1er mars).

En 1ère ligne les mois doivent êtres inscrits avec les accents.

A+
 

Pièces jointes

Dernière édition:
Re : MFC week end

Bonjour le fil, le forum,

Je n'avais pas fait attention, le fichier du post #1 numérote les semaines suivant la norme ISO.

Alors il suffit de remplacer :

Code:
.Rows(-2) = "=""SEM ""&WEEKNUM(R[2]C,2)"
par :

Code:
.Rows(-2) = "=""SEM ""&ISOWEEKNUM(R[2]C)"
Fichier joint.

Bonne journée.
 

Pièces jointes

Re : MFC week end

Re,

Pour ce qui concerne la coloration des Congés, Arrêt maladie, Congés exceptionnels, Crédit d'heures, il y a 2 solutions :

- soit on les colore par MFC (avec des abrévations dans les cellule), alors utiliser la macro du fichier (1)

- soit on modifie leur couleur de fond, alors les week-ends et jours fériés sont à colorer par MFC.

Dans ce cas la macro ne doit plus effacer ni appliquer des couleurs :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim an As Range, ncol%, r As Range, deb%, i%
Set an = [A1]
If Intersect(Target, an) Is Nothing Then Exit Sub
If Val(CStr(an)) < 2010 Then an = Year(Date)
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'pour la fusion des cellules
With [B6:ABE58] '58 à adapter au nombre de noms
  ncol = .Columns.Count
  '---RAZ des bordures---
  Set r = .Columns(2)
  For i = 4 To ncol Step 2
    Set r = Union(r, .Columns(i))
  Next
  r.Borders(xlEdgeRight).Weight = xlHairline
  '---semaines, création et bordures fines---
  .Rows(-2).UnMerge 'défusionne
  .Rows(-2) = "=""SEM ""&ISOWEEKNUM(R[2]C)"
  .Rows(-2) = .Rows(-2).Value
  deb = 1
  For i = 2 To ncol + 1
    If .Cells(-2, i) <> .Cells(-2, i - 1) Then
      Set r = .Cells(-2, deb).Resize(, i - deb)
      r.Merge 'fusionne
      r.HorizontalAlignment = xlCenter
      If i < ncol + 1 Then r.Borders(xlEdgeRight).Weight = xlThin
      Intersect(r.EntireColumn, .Cells).Borders(xlEdgeRight).Weight = xlThin
      deb = i
    End If
  Next
  '---bordures épaisse des mois---
  For Each r In .Rows(-4).SpecialCells(xlCellTypeConstants)
  Intersect(r.MergeArea.EntireColumn, .Cells).Borders(xlEdgeRight).Weight = xlThick
  Next
  '---affichage/masquage du 29 février---
  .Columns(119).Resize(, 2).ColumnWidth = IIf(IsDate("29/2/" & an), 1, 0.1)
  '---Cadrage---
  i = IIf(Year(Date) = an, Application.Match(Format(Date, "mmmm"), .Rows(-4), 0), 1)
  Application.Goto .Cells(-4, i), True
  .Cells(-1, i).Select
End With
'---plage des jours fériés nommée---
Feuil2.[2:14].Columns(an - 2008).Name = "Feries"
End Sub
Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Re : MFC week end

Bonjour,

Je reviens vers vous car je souhaiterais que pour le mois de Janvier 2017, les jours fériés se mettent.
J'ai rajouté une colonne sur feuille "fériés" et sur la feuille "oct-janv" j'ai remis la même formule que pour les autres mois en faisant référence à la cellule A2. Mais ma MFC ne fonctionne pas quand je change les années.
Je vous joins le fichier pour comprendre.
 

Pièces jointes

- 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

  • Question Question
XL 2019 MFC
Réponses
6
Affichages
102
Réponses
7
Affichages
176
  • Question Question
Microsoft 365 Graphique
Réponses
3
Affichages
124
  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
236
Réponses
17
Affichages
564
Retour