IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Congés annuels consécutifs + RTT


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Congés annuels consécutifs + RTT
    Bonjour à tous

    J'essaie d'automatiser le fichier de notre secrétaire de direction , fichier qui sert à suivre le décompte de nos jours de congès, RTT, jours de fractionnement. Je n'ai pas de problème au niveau du décompte des congès RTT, etc ... mon problème est au niveau du calcul des jours acquis pour le fractionnement, je n'arrive pas à faire la formule, car je n'arrive pas à extraire la date de début et de fin des congés consécutifs
    Base de calcul = 24 jours ouvrables (Lundi au samedi)
    Période = 1er mai au 31 Octobre
    Obligation : Avoir pris au moins 12 jours consécutifs pendant cette période samedi compris
    Calcul : Déduire le nombre de jours pris pendant la période, à ces 24 jours.
    Si le nombre restant est supérieur ou égale à 5 ==> 2 Jours de fractionnement
    Si le nombre restant est supérieur à 2 et inférieur à 5 ==> 1 Jour de fractionnement

    Merci d'avance à celui qui trouvera la formule VBA pour récupérer les congés consécutif ainsi vérifier ma formule sur les jours de fractionnement.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,

    A priori, j'éviterais d'aussi longues formules et j'affecterais les cellules du résultat du calcul effectué dans du code vba quitte à ce ce que ce soit des fonctions utilisables dans les feuilles du classeur.
    C'est beaucoup plus facile à tester.

    Quelques précisions :
    La date de fin de CP est-elle un jour "compris".
    Base de calcul = 24 jours ouvrables (Lundi au samedi)
    La semaine de 5 jours n'est pas une obligation légales dans le pays de ton entreprise ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut j'ai simplifié mon planning
    Bonjour à tous

    je n'arrive pas à extraire la date de début et de fin des congés consécutifs de plus de 12 jours consécutifs

    Base de calcul = jours ouvrables (Lundi au samedi)

    Période = 1er mai au 31 Octobre

    Obligation : Avoir pris au moins 12 jours consécutifs pendant cette période samedi compris


    Merci d'avance à celui qui trouvera la formule VBA ou excel pour récupérer les congés consécutif

    j'ai vu sur le forum le post de sofysofe qui m'a pas mal aidé sauf que les jours de congés consecutifs ne sont pas extrait automatiquement
    Fichiers attachés Fichiers attachés

  4. #4
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par defluc Voir le message
    Bonjour,

    A priori, j'éviterais d'aussi longues formules et j'affecterais les cellules du résultat du calcul effectué dans du code vba quitte à ce ce que ce soit des fonctions utilisables dans les feuilles du classeur.
    C'est beaucoup plus facile à tester.

    Quelques précisions :
    La date de fin de CP est-elle un jour "compris".
    La semaine de 5 jours n'est pas une obligation légales dans le pays de ton entreprise ?
    oui la date de fin de CP est un jours compris

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Pour pouvoir t'aider, je voudrais une réponse à ma 2ème question qui n'était pas une boutade
    La semaine de 5 jours n'est pas une obligation légales dans le pays de ton entreprise ?
    à savoir qu'il semble qu'il n'y ait que le dimanche qui soit déduit des congés.
    D'autre part, ton 2ème envoi embrouille tous dans la mesure où les dates de début et de fin de sont plus une donnée mais le résultat d'une formule.
    Or celle-ci est erronée et affiche #N/A parce que "Plage" n'est pas défini.

    Enfin, je reste persuadé que les choses seraient beaucoup plus simple par code VBA que par formules

  6. #6
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    oui effectivement il y a que les dimanche qui sont déduit des congés...

    pour mon 2eme envois c'était pour simplifier car je n'arrive pas a trouver un VBA

    de mon coté je continue de travaillé sur mon projet (1er envois)

    merci de ton aide

  7. #7
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Un petit coup de pouce.

    Voici une fonction qui te donne le nombre de dimanche à déduire quand on lui fournit la date de début de congé et le nombre de jours de la période de congés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function SundayInPeriod(D As Date, NbrDays As Integer) As Integer
    Dim Day1 As Integer, LastDay As Integer
      Day1 = Weekday(D)
      LastDay = Day1 + NbrDays - 1
      SundayInPeriod = LastDay \ 7
    End Function
    Accessoirement, comme le dernier jour de congés est compris, le nombre de jours de la période de congés =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbrDays = DateDiff("d", Date1, Date2) + 1

  8. #8
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    ok merci de ton aide.

    je test ça..

    comment j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbrDays = DateDiff("d", Date1, Date2) + 1

  9. #9
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
    Dim DayName(7) As String
    Dim NbrDays As Integer, NbrSunDays As Integer
    Dim Date1 As Date
      Date1 = Sheets("BD").Cells(2, 7)
      NbrDays = DateDiff("d", Date1, Sheets("BD").Cells(2, 8)) + 1
      NbrSunDays = SundayInPeriod("23/06/2014", NbrDays)
      If NbrSunDays > 0 Then
        MsgBox "Il y a " & NbrSunDays & " dimanche dans la période de " & _
                NbrDays & " jours commençant le " & Date1
                                  Else
        MsgBox "Il n'y a pas de dimanche dans la période de " & NbrDays & " jours commençant " & Date1
      End If
    End Sub

  10. #10
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Merci de ton aide

    Je travail sur 2 Macros "CPPériode & CPConsécutifs" qui je pense peuvent être simplifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function CPPériode(Mai As Range, Juin As Range, Juillet As Range, Août As Range, Septembre As Range, Octobre As Range) As Double
    Dim Cellule As Range
    For Each Cellule In Mai
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    For Each Cellule In Juin
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    For Each Cellule In Juillet
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    For Each Cellule In Août
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    For Each Cellule In Septembre
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    For Each Cellule In Octobre
    If Cellule = "CP" Then CPPériode = CPPériode + 1
    If Cellule = "D" Then CPPériode = CPPériode + 0.5
    Next
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Function CPConsécutifs(Mai As Range, Juin As Range, Juillet As Range, Août As Range, Septembre As Range, Octobre As Range) As Double
    Dim CP As Boolean
    CP = False
    Dim WE As Boolean
    WE = False
    Dim Compteur As Integer
    Compteur = 0
    Dim EnCours As Integer
    EnCours = 0
    For Each Cellule In Mai
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    Next
    Dim Cellule As Range
    For Each Cellule In Juin
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    Next
    For Each Cellule In Juillet
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    Next
    For Each Cellule In Août
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    Next
    For Each Cellule In Septembre
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    Next
    For Each Cellule In Octobre
    If Cellule = "CP" Then
        EnCours = EnCours + 1
        CP = True
    End If
    If Cellule = "WE" And CP = True Then
        WE = True
    End If
    If Cellule <> "WE" And Cellule <> "CP" And CP = True Then
        If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
        EnCours = 0
        WE = False
        CP = False
    End If
    If CPConsécutifs < EnCours Then CPConsécutifs = EnCours
    Next
    End Function
    en oubliant pas de rajouter WE, même sur les fériés

    cela va me permetre d'utilisé une formule de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(CPConsécutifs(Mai;Juin;Juillet;Aout;Septembre;Octobre)>=12;SI(24-CPPériode(Mai;Juin;Juillet;Aout;Septembre;Octobre)>=5;2;SI(24-CPPériode(Mai;Juin;Juillet;Aout;Septembre;Octobre)>2;1;0));0)
    Encore merci de ton aide

  11. #11
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Une question :

    Les plages de mois passées en arguments sont-elles de taille différente aussi bien en nombre de colonnes qu'en nombre de lignes ?

  12. #12
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Nombre de ligne = Nombre employés

    Nombre de colonnes = en fonction du mois et de l'année pour février (28, 29, 30 ou 31 jours)

  13. #13
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Voici ta première fonction modifiée à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    'Function CPPériode(Mai As Range, Juin As Range, Juillet As Range, Août As Range, Septembre As Range, Octobre As Range) As Double
    Function CPPériode() As Double
    Dim PeriodArr(6) As Range
    Dim Period As Variant
    Dim Cellule As Range
      Set PeriodArr(1) = [Mai]
      Set PeriodArr(2) = [Juin]
      Set PeriodArr(3) = [Juillet]
      Set PeriodArr(4) = [Août]
      Set PeriodArr(5) = [Septembre]
      Set PeriodArr(6) = [Octobre]
      For Each Period In PeriodArr
        For Each Cellule In Period
          If Cellule = "CP" Then CPPériode = CPPériode + 1
          If Cellule = "D" Then CPPériode = CPPériode + 0.5
        Next
      Next
    End Function
    Si cela te satisfait, il ne te reste plus qu'à t'en inspirer pour modifier ta fonction "CPConsécutifs".

  14. #14
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    merci de ton aide...je viens de faire le test et ça écrit "#valeur".

  15. #15
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Si #valeur apparait dans une cellule, c'est peut-être parce que la fonction renvoie "Nothing" ce qui est possible si aucune cellule ne comporte "CD" ou "D".
    Initialise donc la fonction à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Set PeriodArr(6) = [Octobre]
      CPPériode = 0
      For Each Period In PeriodArr
    Autre conseil, évites les caractères accentués dans le code, c'est source de problème quand cela s'applique à des noms de variables ou de fonction ("CPPériode", "Août")

  16. #16
    Candidat au Club
    Homme Profil pro
    Dessinateur en batiment
    Inscrit en
    Février 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Dessinateur en batiment

    Informations forums :
    Inscription : Février 2014
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    ok merci, j'ai pris en compte tes remarques ("CPPériode", "Août"), par contre ça m'écrit toujours "#valeur!" et ca me dit manque argument dans la fonction excel.

  17. #17
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Commences par tester les fonctions en mettant dans une celluleIdem avec CPConsécutifs dans une autre cellule.

    Si tu obtiens les résultats escomptés, ce que je pense, c'est dans la formule de la cellule qu'il y a une erreur ou que le format de la cellule ne convient pas.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/10/2010, 10h58
  2. Stage pris en compte pour le congé annuel ?
    Par callmeom dans le forum Congés
    Réponses: 3
    Dernier message: 27/07/2010, 00h29
  3. Réponses: 2
    Dernier message: 26/03/2008, 14h47
  4. pose des congés annuel
    Par philippe24 dans le forum Congés
    Réponses: 2
    Dernier message: 19/02/2008, 18h16
  5. congés en cdd/RTT
    Par tuantuan dans le forum Congés
    Réponses: 1
    Dernier message: 08/09/2007, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo