Nouvelle formule en G2 à copier vers le bas :@ tous : j'avais oublié une subtilité sur les périodes : la dernière peut être en cours, c'est à dire qu'il y a une date de début mais pas de date de fin ; la date de fin à prendre en compte serait alors celle du jour (aujourd'hui()) afin de tenir le calendrier à jour dans le suivi des absences.
=REPT("absent";SOMMEPROD(--((E2>=A$2:A$999)*(E2<=SI((A$2:A$999<>"")*(B$2:B$999="")>0;AUJOURDHUI();B$2:B$999))))>0)
@ Hasco : je n'ai pas réussi à faire fonctionner la proposition et donc impossible de comparer les deux options.
Quelle est l'utilité des signes -- dans la formule SOMMEPROD et dans quel cas l'utiliser ?
Bonjour,@ Hasco : je n'ai pas réussi à faire fonctionner la proposition et donc impossible de comparer les deux options.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, tabP, Q As Range, tabQ, datmin&, datmax&, d As Object, i&, deb&, fin&, dat
Set P = [A1].CurrentRegion.Resize(, 2): tabP = P.Value2 'matrice, plus rapide
Set Q = [E1].CurrentRegion.Resize(, 2): tabQ = Q.Value2 'matrice, plus rapide
datmin = Application.Min(Q.Columns(1))
datmax = Application.Max(Q.Columns(1))
'---mémorise les dates du tableau P---
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tabP)
deb = Val(tabP(i, 1))
If deb > 0 Then
deb = IIf(deb > datmin, deb, datmin)
fin = Val(tabP(i, 2))
If fin = 0 Then fin = Date
fin = IIf(fin < datmax, fin, datmax)
For dat = deb To fin
d(dat) = "absent"
Next dat
End If
Next i
'---remplissage du tableau Q---
For i = 2 To UBound(tabQ)
tabQ(i, 2) = d(tabQ(i, 1))
Next i
'---restitution---
Application.EnableEvents = False 'désactive les évènements
Q = tabQ
Application.EnableEvents = True 'réactive les évènements
End Sub
ça fonctionne quand on actualise les données.Bonjour à tous
Mais encore ? As-tu actualisé ?
Si tu as 2016 il n'y a aucune raison pour ce cela ne fonctionne pas
Le fichier modifié avec une ligne sans date de fin