calendrier jours ouvrés sans weekend

antiphot

XLDnaute Occasionnel
Bonjour à toutes et à tous

J'utilise depuis longtemps un code (d'Alain Vallon) bien pratique pour créer un calendrier annuel sur une colonne.

Néanmoins j'aimerais apporter une modification afin que seul les jours ouvrés apparaissent.
En bref je ne souhaite pas avoir les samedi et les Dimanche. J'ai pas mal cherché sur le forum et ailleurs et si ce n'est pas le nombre de sujet qui manque sur les jours ouvrés, je n'ai pas trouvé ce sujet.

Si quelqu'un peut me dépanner, je lui en serais reconnaissant

Merci par avance

Code Ci-joint

Sub Calendrier()
'Alain Vallon, mpfe
varAn = Val(InputBox("Année ?", "CALENDRIER"))
If varAn = 0 Then Exit Sub 'clic sur touche Annuler ou la croix
X = DateSerial(varAn, 1, 1)
Y = DateValue("31 décembre " & varAn)
For i = 0 To Y - X
Range("A" & i + 1, "B" & i + 1) = X + i
Next
Columns("A:A").NumberFormat = "dddd"
Columns("A:B").EntireColumn.AutoFit 'pour fignoler
End Sub
 

wilfried_42

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

bonjour

voici la macro
Code:
Sub Calendrier()
'Alain Vallon, mpfe
    varAn = Val(InputBox("Année ?", "CALENDRIER"))
    If varAn = 0 Then Exit Sub 'clic sur touche Annuler ou la croix
    x = DateSerial(varAn, 1, 1)
    Y = DateValue("31 décembre " & varAn)
    For i = 0 To Y - x
        If Weekday(x + i, vbMonday) < 6 Then
            Range("A65536").End(xlUp).Offset(1, 0) = x + i
            Range("B65536").End(xlUp).Offset(1, 0) = x + i
        End If
    Next
    Columns("A:A").NumberFormat = "dddd"
    Columns("A:B").EntireColumn.AutoFit 'pour fignoler
End Sub
 

Gael

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Bonjour Antiphot, bonjour Wilfried,

Ou avec un compteur de ligne indépendant:

Code:
Sub Calendrier()
'Alain Vallon, mpfe
varAn = Val(InputBox("Année ?", "CALENDRIER"))
If varAn = 0 Then Exit Sub 'clic sur touche Annuler ou la croix
X = DateSerial(varAn, 1, 1)
Y = DateValue("31 décembre " & varAn)
j = 1
For i = 0 To Y - X
    If Weekday(X + i, 2) < 6 Then
    Range("A" & j, "B" & j) = X + i
    j = j + 1
    End If
Next
Columns("A:A").NumberFormat = "dddd"
Columns("A:B").EntireColumn.AutoFit 'pour fignoler
End Sub

@+

Gael
 

PiK4

XLDnaute Nouveau
Re : calendrier jours ouvrés sans weekend

Bonjour le fil

je souhaite modifier le code de ce calendrier mais je n'y arrive pas, je solicite donc votre aide.
Je l'ai modifier pour avoir les dates du mardi au samedi et que les jours en colonne A n'apparaisse plus

voila ce que je souhaiterais :

-la date qui se trouve en colonne B la faire passer en colonne A et que les dates commence en A10

-qu'il y est un saut de ligne pour les dimanche et lundi

Merci de votre aide
 

kjin

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

bonsoir,
Pas trop compris s'il fallait sauter 1 ligne ou 2
Cas de 2 lignes
Code:
Sub Calendrier()
'Alain Vallon, mpfe...enfin ce qu'il en reste
    varAn = Val(InputBox("Année ?", "CALENDRIER"))
    If varAn = 0 Then Exit Sub 'clic sur touche Annuler ou la croix
    x = DateSerial(varAn, 1, 1)
    Y = DateValue("31 décembre " & varAn)
    j = 10
    For i = 0 To Y - x
        If Weekday(x + i) < 3 Then
            j = j + 1
        Else
            Range("A" & j) = x + i
            j = j + 1
        End If
    Next
    Columns("A:A").NumberFormat = "dddd dd/mm/yyyy"
    Columns("A:A").EntireColumn.AutoFit 'pour fignoler
    
End Sub
si 1 seule ligne
Code:
Sub Calendrier()
'Alain Vallon, mpfe...enfin ce qu'il en reste
    varAn = Val(InputBox("Année ?", "CALENDRIER"))
    If varAn = 0 Then Exit Sub 'clic sur touche Annuler ou la croix
    x = DateSerial(varAn, 1, 1)
    Y = DateValue("31 décembre " & varAn)
    j = 10
    For i = 0 To Y - x
        Select Case Weekday(x + i)
        Case 2
            j = j + 1
        Case 3 To 7
            Range("A" & j) = x + i
            j = j + 1
        End Select
    Next
    Columns("A:A").NumberFormat = "dddd dd/mm/yyyy"
    Columns("A:A").EntireColumn.AutoFit 'pour fignoler
    
End Sub
A+
kjin
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Bonjour le fil,

je cherche à faire une série de 365 jours moins les samedi, dimanche et fériés
à partir de la date du jour en A7,

comment puis-je modifier le code fourni par Wilfried_42 et Gael?

Un immense Merci à vous

Bises du souar:p

Edit : uniquement VBA, sans avoir à activer l'utilitaire d'analyse, mes utilisateurs ne savent pas ce que c'est...:rolleyes:

C@thy
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Bonsoir à tous

Cathy
Si utilisateur amacrotique, alors Selection cellule avec date puis clic-droit -> Incrémenter les jours ouvrés.
Il reste ensuite à supprimer les jours fériés (qui ne sont pas si nombreux)
C'est sans VBA, rapide et sécurisant pour le néophyte ;)
 

C@thy

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Merci les gars, par formule je sais le faire,mais il faut vraiment que ce soit automatisé car certains fériés doivent être "débrayables"

Avec un USF on doit pouvoir (dé)cocher les fériés (ex. le lundi de Pentecôte),on doit aussi pouvoir rajouter un jour (ex. le vendredi saint et le 26/12)
En fait je vais rajouter le vendredi saint et le 26/12 dans ma liste des checkboxes comme ça ça simplifiera le problème

Merci à vous pour vos propositions, mais je ne peux pas régler ce problème par formules

Bises et bonne journée

C@thy
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Bonjour à tous

Cathy:
Pour infos, ma proposition était vierge de toutes formules et sans vba itou ;)

Mais s'il faut servir le Dieu VBA, alors je vais de ce pas me mettre en Option Explicit ;)

EDITION: Voila un petit truc un peu rustique mais qui fonctionne (avec le concours de A. VALLON)
Code:
Sub Calendrier()
' Macro commise le 06/11/2012 par Staple au petit matin
Application.ScreenUpdating = False
If IsEmpty([A7]) Then [A7] = "1/1/" & Year(Now)
Range("A7:A269").DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
        xlWeekday, Step:=1, Trend:=False
 Set Calend = Range("A7:A269")
 Calend.NumberFormat = "ddd d/mm/yyyy"
 For Each c In Calend
 If EstFerie(c) Then
 c.EntireRow.Delete
 End If
 Next c
End Sub
Code:
Function EstFerie(D) As Boolean
'd'après Alain Vallon, mpfe
Dim A&, M As Byte
  A = Year(D): M = Month(D) ' variables date jour
  jf1 = DateValue("1/1/" & A) * 1 'Jour de l'A
  If D = jf1 Then GoTo Fin
  jf2 = Evaluate("round(date(" & A & ",4,mod(234-11*mod(" & _
                  A & ",19),30))/7,)*7-6") + 1 'Lundi Pâques
  If D = jf2 Then GoTo Fin
  jf3 = DateValue("1/5/" & A) * 1 ' 1° Mai
  If D = jf3 Then GoTo Fin
  jf4 = DateValue("8/5/" & A) * 1 ' 8 Mai
  If D = jf4 Then GoTo Fin
  jf5 = jf2 + 38 * 1 ' Jeudi Ascension
  If D = jf5 Then GoTo Fin
  jf6 = jf2 + 49 * 1 ' Lundi Pentecôte
  If D = jf6 Then GoTo Fin
  jf7 = DateValue("14/7/" & A) * 1 ' 14 Juillet
  If D = jf7 Then GoTo Fin
  jf8 = DateValue("15/8/" & A) * 1 ' 15 Aout
  If D = jf8 Then GoTo Fin
  jf9 = DateValue("1/11/" & A) * 1 ' Toussaint
  If D = jf9 Then GoTo Fin
  jf10 = DateValue("11/11/" & A) * 1 ' 11 Novembre
  If D = jf10 Then GoTo Fin
  jf11 = DateValue("25/12/" & A) * 1 ' Noël
  If D = jf11 Then GoTo Fin
  Exit Function
Fin:
  EstFerie = True
End Function

PS: On doit pouvoir mieux faire plus bref et rendre tout cela plus propret, mais j'ai pas encore bu mon café et suis encore un peu dans les limbes. Je laisse le soin à ceux qui se lèvent tôt et qui sont déjà au taquet de faire la toilette à ce code pendant que j'irai faire la mienne ;)
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

C'est vrai Staple, tu as donné une soluce sans formule, et que j'utilise assez souvent,
et pour moi aussi, la meilleure macro c'est celle qu'on évite d'écrire (Ti disait toujours ça!),
mais là, comme tu dis, il faut servir le dieu VBA ;), c'est implicite... alors, soyons explicites...:p

Un grand merci à toi de te pencher sur mon problème:):):)

Bises

C@thy
 

Dormeur74

XLDnaute Occasionnel
Re : calendrier jours ouvrés sans weekend

Bonjour tout le monde

#C@thy

Petit code en VBA pour afficher tous les jours ouvrés jusqu'à la fin de l'année à partir de la date d'aujourd'hui en A7.
Comme la liste des jours fériés est liée aux conventions collectives (elles peuvent prévoir un jour chômé récupérable lorsqu'un jour férié tombe un samedi ou un dimanche), j'ai préféré mettre la liste dans une feuille à part. Si on modifie cette liste, on doit relancer le calcul du nouveau calendrier.
 

Pièces jointes

  • Classeur1.xls
    28 KB · Affichages: 189
  • Classeur1.xls
    28 KB · Affichages: 197
  • Classeur1.xls
    28 KB · Affichages: 212

Staple1600

XLDnaute Barbatruc
Re : calendrier jours ouvrés sans weekend

Bonjour Dormeur74

Cathy:
Je suis explicite dans mon précédent message mais toujours aussi mal réveillé.
Est-ce que cette macro colle plus à tes souhaits?
J'ai cru voir que tu causais Userform. J'irai en titiller après ma douche ;)
 

Discussions similaires

Réponses
38
Affichages
5 K

Statistiques des forums

Discussions
312 294
Messages
2 086 899
Membres
103 404
dernier inscrit
sultan87