XL 2016 Uniformiser la date des cellules

  • Initiateur de la discussion Initiateur de la discussion Phylo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Phylo

XLDnaute Occasionnel
Bonjour

J 'ai crée un fichier excel qvec un code vba qui incorpore la date automatiquement
Mais vu que le fichier est utilisé par plusieurs personne. La date entrée est variable selon la date d' ordi de chaque personne

je veux insérer l'instruction dans ce code

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Columns("J")) Is Nothing And Target.Value <> "" Then
Target.Offset(0, 1).Value = Date & " " & Time
End If

'Dans les colonnes I et K la format de la date est : dd-mm-yyyy
exemple :
Columns()Numberformat="dd-mm-yyyy"


Merci d'avance
 

Pièces jointes

Solution
Mode:=1 est à préciser après une virgule à la fin d'une instruction CA.Add dans la Sub UserForm_Initialize.
Oui, elle ne gène pas, elle est là au cas où vous auriez besoin un jour de pouvoir en supprimer une. Ne serait-ce qu'à la suite d'un ajout avec une information erronée tapée dans une ComboBox.

Je joint mon classeur où j'ai déplacé un ou deux CA.Add pour qu'ils soient dans un ordre plus proche de celui des colonnes du tableau.
le code n'a pas encore marché

j'ai changé la configuration a tous le monde mais malgré ça

1600109627377.png
 
Joignez le classeur.
Normalement ça devrait marcher.
Et vous n'avez pas mis les Application.EnableEvents = False puis True ?
À chaque fois que vous mettez cette date ça la ré-exécute. Est-ce que ça ne le contrecarre pas ?
Normalement non si vous avez bien indiqué toute la procédure. Mais c'est un principe: ne jamais changer de cellule dans une Sub WorkSheet_Change sans avoir préalablement exécuté Application.EnableEvents = False. C'est un coup à saturer la pile des appels.
 
Dernière édition:
Ce n'est pas tout à fait la même chose.
J'ai eu la surprise de le voir interpréter Now alors que c'était déjà une date et une heure.
J'ai dû utiliser Value2 pour l'obliger à prendre ce que je lui mets, un point c'est tout !
Ça se rapproche là ? :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.CountLarge > 1 Then Exit Sub
   If Intersect(Me.ListObjects(1).DataBodyRange, Target) Is Nothing Then Exit Sub
   If Not Intersect([J:J,L:L,N:N,S:S,U:U,W:W], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy h:mm": .Value2 = Now: End With
      If Not Intersect([J:J,S:S], Target) Is Nothing Then
         With Target.Offset(0, -1)
            .NumberFormat = "m/d/yyyy h:mm": .Value2 = Now + 2: End With
         End If
      Application.EnableEvents = True
   ElseIf Target.Column = 2 Then
      Dim Cel As Range
      Set Cel = Sheets("Mes listes").Columns(1).Cells.Find(what:=Target.Value, LookAt:=xlWhole)
      If Not Cel Is Nothing Then
         Application.EnableEvents = False
         Target.Offset(0, 1).Value = Cel.Offset(0, 1).Value
         Application.EnableEvents = True
         End If
      End If
   End Sub
 
Je veux pas d'indépendance des colonnes
si je rempli par exemple J et il remplie K et M

je veux comme c'était séparé
j'ai essayé ce code mais ne marche pas


VB:
 Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.CountLarge > 1 Then Exit Sub
   If Intersect(Me.ListObjects(1).DataBodyRange, Target) Is Nothing Then Exit Sub
   If Not Intersect([J:J], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
  If Not Intersect([L:L], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
 If Not Intersect([N:N], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With

 If Not Intersect([S:S], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
 If Not Intersect([U:U], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
If Not Intersect([W:W], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
If Not Intersect([J:J], Target) Is Nothing Then
         With Target.Offset(0, -1)
            .NumberFormat = "m/d/yyyy": .Value2 = Date + 2: End With
If Not Intersect([S:S], Target) Is Nothing Then
         With Target.Offset(0, -1)
            .NumberFormat = "m/d/yyyy": .Value2 = Date + 2: End With
      Application.EnableEvents = True
   ElseIf Target.Column = 2 Then
      Dim Cel As Range
      Set Cel = Sheets("Mes listes").Columns(1).Cells.Find(what:=Target.Value, LookAt:=xlWhole)
      If Not Cel Is Nothing Then
         Application.EnableEvents = False
         Target.Offset(0, 1).Value = Cel.Offset(0, 1).Value
         Application.EnableEvents = True
         End If
   End Sub
 
Voulez-vous dire que ça doit réagir si on modifie plusieurs cellules en même temps ?
Je n'ai pas l'impression.
Le code que je proposai au #20 prévoyait bien un traitement supplémentaire des cellules à gauche des colonnes J et S, en plus de celui de celles à leur droite.
Je ne comprends pas ce que vous voulez dire.
Dans votre code il me semble y avoir un risque que Application.EnableEvents soit laissé à False à la fin de l'exécution. Après plus rien ne marche !
Et puis écrit comme ça il doit manquer plein de End If, non ?
 
Salut

J'ai constaté comme si j'ai une fonction now malgré que j'ai mis date a la place ???
moi je veux qu'il me fige la date enregistré mais avec une format dd-mm-aaaa
tout est fonctionnel

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.CountLarge > 1 Then Exit Sub
   If Intersect(Me.ListObjects(1).DataBodyRange, Target) Is Nothing Then Exit Sub
   If Not Intersect([J:J,L:L,N:N,S:S,U:U,W:W], Target) Is Nothing Then
      Application.EnableEvents = False
      With Target.Offset(0, 1)
         .NumberFormat = "m/d/yyyy": .Value2 = Date: End With
      If Not Intersect([J:J,S:S], Target) Is Nothing Then
         With Target.Offset(0, -1)
            .NumberFormat = "m/d/yyyy": .Value2 = Date + 2: End With
         End If
      Application.EnableEvents = True
   ElseIf Target.Column = 2 Then
      Dim Cel As Range
      Set Cel = Sheets("Mes listes").Columns(1).Cells.Find(what:=Target.Value, LookAt:=xlWhole)
      If Not Cel Is Nothing Then
         Application.EnableEvents = False
         Target.Offset(0, 1).Value = Cel.Offset(0, 1).Value
         Application.EnableEvents = True
         End If
      End If
   End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 format date
Réponses
3
Affichages
105
Réponses
5
Affichages
241
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
482
Réponses
2
Affichages
511
Retour