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
|
Sub Test()
Dim Plage As Range
Dim Cel As Range
Dim Absent As Boolean
Dim NBFois As Integer
Dim I As Integer
'défini la plage sur la colonne B de la feuille active
With ActiveSheet
Set Plage = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0))
End With
'parcour la plage
For Each Cel In Plage
'si ce n'est pas un Weekend...(pas géré les jours fériés !)
If Weekday(Cel.Value, vbMonday) <> 6 And Weekday(Cel.Value, vbMonday) <> 7 Then
'si la valeur de la cellule à coté est 1 (colonne C) absence
If Cel.Offset(, 1).Value = 1 Then
Absent = True
'si 0 et Absent est Vrai, on fini une période d'absence donc ajout
Else
If Absent = True Then NBFois = NBFois + 1
Absent = False
End If
End If
If Cel.Offset(, -1).Value = "" Then
'si on fini à Vrai, période d'absence donc ajout
If Absent = True Then NBFois = NBFois + 1
'affiche les messages pour informer du nombre de jours d'absence. A supprimer si pas nécessaire !
MsgBox "'" & Cel.Offset(-1, -1).Value & "' a été absent " & NBFois & " fois"
'inscrit les résultats dans la feuille "Feuil2", le nom en colonne A et le nombre de fois en colonne B
I = I + 1
Worksheets("Feuil2").Cells(I, 1).Value = Cel.Offset(-1, -1).Value
Worksheets("Feuil2").Cells(I, 2).Value = NBFois
NBFois = 0
End If
Next Cel
End Sub |
Partager