Bonsoir,
A essayer :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim k%, n%, r As Range
Select Case Sh.Name
Case "Visite médicale"
k = 11
Case "Badge"
k = 10
Case "Permis civil"
k = 16
Case "Permis Piste", "Sureté"
k = 12
Case Else
Exit Sub
End Select
If Not Intersect(Sh.Columns(Chr(64 + k) & ":" & Chr(65 + k)), Target) Is Nothing Then
For Each r In Target.Rows
n = r.Row
If n < 3 Then Exit Sub
With Sh
If .Cells(n, k + 1).Value <> "" Then
.Cells(n, 2).Value = "ok"
ElseIf .Cells(n, k).Value <> "" Then
If .Cells(n, k).Value < Date Then
.Cells(n, 2).Value = 0
Else
.Cells(n, 2).Value = DateDiff("d", Date, .Cells(n, k).Value)
End If
End If
End With
Next r
End If
End Sub
A mettre dans le module ThisWorkbook.
Conçue pour te permettre de rétablir en bloc la situation pour chaque feuille concernée :
- Effacer les formules en B (tu peux également effacer la formule en A2 qui ne servira plus.
- Dans la colonne des dates de RV, qui varie selon les feuilles, sélectionner les données déjà inscrites, les copier et les coller sur elles-mêmes (ce qui lancera la macro, qui traitera toutes les lignes ; NB- l'action sur une seule colonne suffit, la macro tient compte des deux).
Par la suite, la macro réagira selon les dates portées dans la colonne ou la mention dans la colonne voisine.
Si d'autres feuilles devaient s'ajouter pour ce traitement, pour qu'elles soient prises en compte dans la macro, il suffira d'ajouter leur nom dans l'instruction Select Case : ajouter un Case "nom de feuille" avec en dessous : k = numéro col. date , OU si ce numéro de col. est commun avec une feuille déjà inscrite, ajouter simplement le nom de la feuille (entre guillemets) à la suite sur la ligne Case.
Cordialement