calculer le nombre de jours d'absences consécutifs

OUIZEMANN

XLDnaute Junior
Bonjour à toutes et tous,

J'ai à nouveau besoin de votre aide.

Je suis à la recherche d'une formule me permettant de calculer le nombre de jours d'absences consécutifs, au cours d'une période donnée.

Je vous joint mon modèle pour mieux comprendre ce que je souhaite.

Par avance merci.

A bientôt.
 

Pièces jointes

  • TEST CALCUL CONGES ANNUELS.xls
    277 KB · Affichages: 248

hoerwind

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Bonjour,

Pas grand monde pour te venir en aide, peut-être parce que la question n'est pas suffisamment précise, ou bien que la question est trop complexe ?

calculer le nombre de jours d'absences consécutifs, au cours d'une période donnée
Est-ce le nombre de la plus grande série, ou l'addition de toutes les séries (mais cela tu l'as déjà !) ?

J'entrevois une solution mais les cellules fusionnées en lignes 4, 5 et 6 sont fort gênantes, vois-tu une possibilité de les supprimer, ou bien faut-il faire "avec" ?
 

david84

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Bonjour, salut Hoerwind,
je te propose une fonction personnalisée. A toi de la tester et de voir si elle te convient avant éventuellement de l'améliorer :
Code:
Function Conges(Plage As Range) As Byte
Dim c As Range, temp As Byte, temp2 As Byte
For Each c In Plage
If c.Value = 1 Then temp = temp + 1
If c.Value <> 1 And c.Interior.ColorIndex = 48 Then temp = temp + 0
If c.Value <> 1 And c.Interior.ColorIndex <> 48 Then
    If temp2 < temp Then
        temp2 = temp: temp = 0
    Else
        temp = 0
    End If
End If
Next c
Conges = temp2 / 2
End Function
A+
 

Pièces jointes

  • TEST CALCUL CONGES ANNUELS (2).xls
    297.5 KB · Affichages: 176

OUIZEMANN

XLDnaute Junior
Re : calculer le nombre de jours d'absences consécutifs

Bonsoir,

Tout d'abord, merci pour l'intérêt que vous portez à ma question.

David84, en fait ce que tu me propose ne correspond pas tout à fait à ce que je souhaite.

En réalité j'ai besoin de calculer le plus grand nombre de jours de congés consécutifs pris sur cette ligne (de la ligne "C" à "IT"). Mon objectif est d'avoir le nom des personnes qui ont pris plus de 10 jours consécutifs (et non en cumulé), en tenant bien sur compte des week-end. Par exemple pour le "NOM1", il a pris 11 jours consécutifs du 02/05 au 16/05, alors que le "NOM11" a pris en jours consécutifs 4 jours. Ta formule a l'air de fonctionner mais quand j'ajoute des jours d'absences le calcul est faux.

J'espère que j'ai été clair dans mon explication.

Merci à tous pour votre aide.
 

david84

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Re
Par exemple pour le "NOM1", il a pris 11 jours consécutifs du 02/05 au 16/05, alors que le "NOM11" a pris en jours consécutifs 4 jours.
ce sont les résultats ramenés par la formule.
Ta formule a l'air de fonctionner mais quand j'ajoute des jours d'absences le calcul est faux.
j'ai fait le test sur le fichier joint et cela semble fonctionner mais le problème, c'est que un jour est égal à 2 cases incrémentées du 1. Pourquoi 2 cases pour une journée ? Chaque case représente-t-elle une demi-journée ?
Si c'est le cas et que tu veux obtenir un réponse à la demi-journée près tu peux utiliser la même fonction en remplaçant simplement dans le code
Code:
Conges = temp2 / 2
par
Code:
Conges = temp2
ce qui te donnera le nombre de demi-journées consécutives,
et utiliser la formule
Code:
=Conges(C8:IT8)
si tu veux le nombre de demi-journées consécutives ou
Code:
=Conges(C8:IT8)/2
si tu veux le nombre de journées avec les demi-journées comptabilisées (13,5 pour 13 journées et demie par exemple).
Sinon, je ne vois pas trop à quoi tu fais référence. Le plus simple est de noter les exemples qui ne correspondent pas au résultat attendu sur le fichier.
A+
 

OUIZEMANN

XLDnaute Junior
Re : calculer le nombre de jours d'absences consécutifs

Merci David84, c'est bien par 1/2 journée que je veux le calcul, cela fonctionne très bien, mais seulement jusqu'à la colonne IQ ?

En effet, si j'ajoute par exemple 1/2 journée dans la cellule IR, cela reste à zéro ; y a t'il un moyen d'allonger le calcul jusqu'à la cellule IT. Si tu me trouve la solution, ce sera exactement ce que je veux.

Je te remercie par avance.

A +
 

job75

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Bonjour OUIZEMANN, salut hoerwind, David,

Une autre fonction macro :

Code:
Function MAXCONGES(plage As Range) As Byte
Dim cel As Range, txt As String, s
Dim ub As Integer, tablo() As Byte, i As Byte
For Each cel In plage
  If cel.Interior.ColorIndex = xlNone Then 'week-end ignoré
    If cel Then txt = txt & 1 Else txt = txt & " "
  End If
Next
txt = Application.Trim(txt) 'fonction SUPPRESPACE
s = Split(txt) 'l'espace est le séparateur par défaut
ub = UBound(s)
If ub >= 0 Then
  ReDim tablo(ub)
  For i = 0 To ub
    tablo(i) = Len(s(i))
  Next
  MAXCONGES = Application.Max(tablo) / 2
End If
End Function
Fichier joint.

A+
 

Pièces jointes

  • TEST CALCUL CONGES ANNUELS(1).xls
    288 KB · Affichages: 133

david84

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Re, bonsoir Job,
ci-joint le code modifié en conséquence, à tester :
Code:
Function Conges(plage As Range) As Byte
Dim c As Range, temp As Byte, temp2 As Byte
For Each c In plage
If c.Value = 1 Then temp = temp + 1
If c.Value <> 1 And c.Interior.ColorIndex = 48 Then temp = temp + 0
If c.Value <> 1 And c.Interior.ColorIndex <> 48 Then
    If temp2 < temp Then temp2 = temp: temp = 0 Else temp = 0
End If
Next c
Conges = Application.WorksheetFunction.Max(temp, temp2)
End Function
Code:
=Conges(C8:IT8)
pour le calcul des demie-journées
Code:
=Conges(C8:IT8)/2
pour le calcul des journées à la demi-journée près.
Cela semble donner les résultats escomptés mais à toi de voir.

@Job:) : voir s'il n'y a pas moyen d'accélérer le traitement des solutions que nous avons proposées car je les trouve un peu longue (qu'est-ce que cela donne chez toi?).

Edit : je viens de tester à nouveau les 2 solutions indépendamment et la tienne est plus rapide.
A+
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Re
je te conseille plutôt d'utiliser la fonction proposée par Job qui est plus rapide.
Si tu veux un résultat par demi-journée, tu n'as qu'à remplacer dans le code
Code:
MAXCONGES = Application.Max(tablo) / 2
par
Code:
MAXCONGES = Application.Max(tablo)
.
Pour le résultat voulu (par demi-journée ou par journée, opérer comme pour la mienne :
Code:
=MAXCONGES(C8:IT8)
pour le total des demi-journées et
Code:
=MAXCONGES(C8:IT8)/2
pour celle des journées à la demi-journée près.
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : calculer le nombre de jours d'absences consécutifs

Bonjour David,

Merci d'avoir testé la rapidité et de ton attention :)

Je pense que ma macro va plus vite parce que je réduis le tableau à étudier avec Application.Trim.

J'en profite pour donner une solution plus simple (je n'utilise plus la variable tablo) :

Code:
Function MAXCONGES(plage As Range) As Byte
Dim cel As Range, txt As String, s, i As Integer
For Each cel In plage
  If cel.Interior.ColorIndex = xlNone Then 'week-end ignoré
    If cel Then txt = txt & 1 Else txt = txt & " "
  End If
Next
txt = Application.Trim(txt) 'fonction SUPPRESPACE
s = Split(txt) 'l'espace est le séparateur par défaut
For i = 0 To UBound(s)
  MAXCONGES = Application.Max(MAXCONGES, Len(s(i)))
Next
MAXCONGES = MAXCONGES / 2
End Function
La rapidité ne devrait pas en être affectée.

Fichier (2).

A+
 

Pièces jointes

  • TEST CALCUL CONGES ANNUELS(2).xls
    288 KB · Affichages: 186

Discussions similaires

Statistiques des forums

Discussions
312 307
Messages
2 087 095
Membres
103 467
dernier inscrit
Pandiska