XL 2016 Uniformiser la date des cellules

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

  • FOR-AQ release inbox 07-09-2020.xlsm
    765.1 KB · Affichages: 107
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.

Phylo

XLDnaute Occasionnel
La fonction NOW renvoie la date et l'heure actuelles, mises à jour en permanence lorsqu'une feuille de calcul est modifiée ou ouverte. Moi je veux la date réelle d'enregistrement et qu'elle reste fixe.
Mon probléme est que je ne peux uniformiser la date entrée par différentes personnes
 

Dranreb

XLDnaute Barbatruc
La fonction VBA.Now renvoie la valeur de la date et de l'heure au moment où on l'invoque. Si on l'affecte à une valeur de cellule on n'affecte pas de formule à celle ci, n'est-ce pas.
Uniformisez le format des cellules. Mais c'est trop tard pour les cellules qui ont déjà une date fausse ou un texte non converti parce qu'on leur a mis des String qu'il a pris de travers selon une règle d'interprétation internationale au lieu de leur mettre des valeurs de date et heure données par la fonction Now.
 
Dernière édition:

Phylo

XLDnaute Occasionnel
La fonction VBA.Now renvoie la valeur de la date et de l'heure au moment où on l'invoque. Si on l'affecte à une valeur de cellule on n'affecte pas de formule à celle ci, n'est-ce pas.
Uniformisez le format des cellules. Mais c'est trop tard pour les cellules qui ont déjà une date fausse ou un texte non converti parce qu'on leur a mis des String qu'il a pris de travers selon une règle d'interprétation internationale au lieu de leur mettre des valeurs de date et heure données par la fonction Now.

Merci bcp Dranreb pour tés réponses
le code marche tres bien avec la fonction now

mais j ai un petit souci si quand la date est incoroprèe je ne peux pas modifier cette date pour antidater par exemple. Certains ^personne oublient la tache et veulent la date d'hier, il y a une formule qui empéche le changement et il n'accépte que la date enregistrée par la macro

j'espère que j'étais trés explicite
 
Dernière édition:

Phylo

XLDnaute Occasionnel
Merci bcp Dranreb pour tés réponses
le code marche tres bien avec la fonction now

mais j ai un petit souci si quand la date est incoroprèe je ne peux pas modifier cette date pour antidater par exemple. Certains ^personne oublient la tache et veulent la date d'hier, il y a une formule qui empéche le changement et il n'accépte que la date enregistrée par la macro

j'espère que j'étais trés explicite
 

Dranreb

XLDnaute Barbatruc
Vérifiez bien si la Worksheet_Change ne réagit pas à tort si c'est une des colonne de dates qui est changée. Pour bien faire il faudrait encadrer tout changement de valeur de cellule d'un Application.EnableEvents = False devant et = True après le changement pour qu'il ne provoque pas un appel récursif de la procédure.
 

Phylo

XLDnaute Occasionnel
Vérifiez bien si la Worksheet_Change ne réagit pas à tort si c'est une des colonne de dates qui est changée. Pour bien faire il faudrait encadrer tout changement de valeur de cellule d'un Application.EnableEvents = False devant et = True après le changement pour qu'il ne provoque pas un appel récursif de la procédure.
Salut
STP j'aurai besoin de ton aide

Comment je peux exiger que la date entrée soit de la format dd-mm-aaaa
quelque soit la configuration de l'ordinateur de la personne qui entre la date


Merci d'avance
 

Phylo

XLDnaute Occasionnel
Bonsoir.
À votre place je mettrais une validation de donnée: Autoriser: Date.
Après du moment que la valeur de la cellule sera forcément une date et non un texte, son apparence dépendra de son format d'affichage.

Bonsoir

la date est entrée automatiquement par la macro n'est pas tapée manuellement
voici le 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
End If

merci
 

Dranreb

XLDnaute Barbatruc
Normalement ça doit mettre une date. Vérifiez toutefois si ce n'est pas contrecarré par un format Texte préexistant sur les cellules. Certains formats incitent Excel à se sentir autorisé à prendre comme valeur de cellule autre chose que ce qu'on lui dit, ce que personnellement je déplore beaucoup …
 

Phylo

XLDnaute Occasionnel
Vous pouvez aussi essayer :
VB:
With Target.Offset(0, 1): .NumberFormat = "dd-mm-yyyy": .Value = Date: End With
Merci bcp pour ton code

Tu pourras stp me confirmer la quelle est bonne
*avant de l'introduire

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
With Target.Offset(0, 1): .NumberFormat = "dd-mm-yyyy": .Value = Date: End With
End If

ou

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Columns("J")) Is Nothing And Target.Value <> ""
With Target.Offset(0, 1): .NumberFormat = "dd-mm-yyyy": .Value = Date: End With
End If

merci bcp
 

Discussions similaires

Statistiques des forums

Discussions
315 132
Messages
2 116 591
Membres
112 799
dernier inscrit
valdeff