Re,
en relisant de plus près :
Cells(i, "B").Value =Date & " " & Time
ce que tu mets dans la cellule est un string. Donc le NumberFormat que tu essayais de poser ne servait à rien, comme son nom l'indique il sert à formater les numériques (il aurait fallu écrire date + time) pas les chaînes. Sans compter qu'ajouter l'heure alors que le format n'affichait que la date...
Ça n'explique en rien l'erreur que tu avais mais bon...
Là tu as en fait un formatage automatique par VBA à la volée sauf que comme d'hab il hésite entre jj/mm et mm/jj ; essaye de mettre
Cells(i, "B").Value =Date -15 & " " & Time
comme si on était en début de mois et regarde ce que tu obtiens.
Avec ce que tu as ajouté :
Déjà je ne vois pas l'appel de AfficheJour ; donc on ne sait pas pas si ton pb est qu'il ne se passe rien ou que ce qui se passe n'est pas ce que tu attends.
Si tu lances AfficheJour "à la main", avec
If Cells(i, "A").Value <> "" And Cells(i, "B").Value = "" Then Cells(i, "B") = Date
cette fois tu as bien un numérique, et sans format ça doit donner environ 45 313 (en tout cas aujourd'hui 22/01/2024).
Soit tu mets le format dans la foulée, avec le risque de voir revenir le bug (enfin ça serait un moindre mal on pourrait se repencher dessus...) soit tu formates la valeur en la posant
1 2 3 4
| If Cells(i, "A").Value <> "" And Cells(i, "B").Value = "" Then
Cells(i, "B") = Date
Cells(i, "B").NumberFormat = "dddd"
End If |
ou
If Cells(i, "A").Value <> "" And Cells(i, "B").Value = "" Then Cells(i, "B") = Format(Date,"dddd")
Attention en passant : comme tu n'as appliqué ni les recommandations de Philippe sur le test de target, ni les miennes sur le EnableEvents, le sub OnChange va partir plus que jamais pour rien.
Essaye :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim MaDate As Double
Dim MesModifs As Range, MaModif As Range
Application.EnableEvents = False
On Error GoTo fin_change
MaDate = Date + Time ' en cas de sélection multiple, si la màj est ralentie, toutes les lignes auront * quand même * le même horodatage
Set MesModifs = Application.Intersect(Target, Range("A2:A100"))
If Not MesModifs Is Nothing Then
For Each MaModif In MesModifs.Cells
If MaModif.Value <> "" And MaModif.Offset(0, 1).Value = "" Then
MaModif.Offset(0, 1).Value = MaDate
MaModif.Offset(0, 1).NumberFormat = "dddd dd/mm/yyyyy hh:mm:ss"
End If
Next MaModif
End If
fin_change:
If Err <> 0 Then MsgBox "Erreur #" & Err & " " & Err.Description, vbCritical
Application.EnableEvents = True
End Sub |
Partager