XL 2013 MFC week end

minimutch

XLDnaute Junior
Bonjour,

Je n'arrive pas à mettre les week end en gris par une MFC.
Sachant qu'un jour comporte 2 colonnes (matin / am).

Merci
 

Pièces jointes

  • Planning.xlsx
    41.4 KB · Affichages: 63
  • Planning.xlsx
    41.4 KB · Affichages: 60

Efgé

XLDnaute Barbatruc
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
 

Efgé

XLDnaute Barbatruc
Re : MFC week end

Re
Je crois que l'on ne vas pas s'en sortir.
Pour quelle solution as-tu opté ?

En tout état de cause il te faudra une table des fériés sur laquelle s'appuyer....
Ensuite nous verrons....
Cordialement
 

Pièces jointes

  • Fériés.xlsx
    10.1 KB · Affichages: 37
  • Fériés.xlsx
    10.1 KB · Affichages: 39

Efgé

XLDnaute Barbatruc
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
 

minimutch

XLDnaute Junior
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

  • Planning essai.xlsx
    44.4 KB · Affichages: 31

Efgé

XLDnaute Barbatruc
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

  • week-end-planning(4).xlsx
    48.6 KB · Affichages: 30
Dernière édition:

job75

XLDnaute Barbatruc
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 :rolleyes:

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

  • Planning VBA(1).xlsm
    176.4 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Planning VBA ISO(1).xlsm
    176.4 KB · Affichages: 28

job75

XLDnaute Barbatruc
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

  • Planning VBA ISO(2).xlsm
    164.6 KB · Affichages: 31
Dernière édition:

minimutch

XLDnaute Junior
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

  • Absences.xls
    79.5 KB · Affichages: 34
  • Absences.xls
    79.5 KB · Affichages: 37

Discussions similaires

Réponses
29
Affichages
966

Statistiques des forums

Discussions
312 333
Messages
2 087 378
Membres
103 529
dernier inscrit
gonzi