La citation du post initial que j'ai déjà reproduite se poursuivait ainsi :
afin d'avoir la mise à jour de la 1ère colonne quand on ouvre une feuille voulu.
Ce qui devrait donc conduire à :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim k%, n%, r As Range
Select Case Sh.Name
Case "Visite médicale", "SPPA"
k = 11
Case "Badge", "Formation"
k = 10
Case "Vide1"
k = 16
Case "Permis civil", "Sureté"
k = 12
Case Else
Exit Sub
End Select
For Each r In Sh.ListObjects(1).DataBodyRange.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 Sub
pour limiter la modif au minimum... Car la position de la cellule active à l'activation d'une feuille n'a aucune inicdence sur le besoin éventuel de mise à jour, lequel ne se justifie que par un éventuel changement de la date du jour, concernant alors la totalité du tableau.
A Pompaero de vérifier que cela correspond à son besoin et que c'est bien ce qu'il souhaite faire.
Ensuite, il pourrait être judicieux d'optimiser l'écriture (éviter les répétitions dans 2 procédures accomplissant une action semblable en limitant les évènementielles aux tests, en faisant appel à une fonction renvoyant k (en fonction du nom de feuille, 0 si la procédure n'a pas lieu d'être lancée), puis en lançant s'il y a lieu une procédure commune en lui passant un objet Range définissant les lignes sur lesquelles intervenir...
Cordialement.