Fonction en centièmes

M

Michel P.

Guest
Bonjour à tous

La fonction Excel "MAINTENANT()" renvoie l'heure système en centièmes dans une cellule formatée "hh:mn:ss.00".

Cette fonction est volatile et donc se recalcule à chaque validation d'une cellule quelconque.

Je passe par VBA avec la Sub suivante:

Sub Debut()
Range("C2").Select
ActiveCell.Formula = "=Now()"
ActiveCell.Copy
ActiveCell.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Range("C6").Select
End Sub
…et hop, miracle, ça marche: l'heure est fixe et en centièmes

Maintenant je veux faire la même chose mais avec une fonction personnalisée mais PAS dans la cellule active

J'ai donc écrie ceci :

Function Passage() As Date
Formula = "=Now()"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
??????? Ici il manque quelque chose
Application.CutCopyMode = False
End Function

Il manque certainement l'affectation de la valeur à la fonction
Mon problème est plus lié à ma méconnaissance en VBA qu'aux problèmes d'heures.

Merci à Léa et à Galopin01 pour leur 1ère approche
MP.
 
S

Sylvain

Guest
bonjour,

une procédure function ne peut pas manipuler la feuille (copy paste...) ce n'est pas possible.

En fait il faut réfléchir au moment où tu veux fixer la date et passer plutôt par une procédure associée à cet événement.

A+
 
G

galopin01

Guest
Bonjour,
Je tacherai de travailler ça cet après midi chez moi pour voir si j'arrive à capter des centièmes. Les ordi du boulot refusent absolument de me donner autre chose que des 00 en guise de centièmes.
Mais je suis sceptique. Il est vrai que chez moi j'avais fait mes test avec time et non pas now, mais peu être y a-t-il un truc complémentaire (en dehors du format ss.00 )
Peut-être aussi as-tu un ordi boosté super speed... les miens ont déjà tous au moins 2 ans !
A+
 
G

galopin01

Guest
Bonsoir,
Effectivement en partant avec Time j'avais tout faux "now()" donne une meilleure précision...
Voici la formule que tu adapteras à ton cas :

Sub Test()
[A1].Formula = "=Now()"
ActiveCell.Copy
ActiveCell.PasteSpecial Paste:=xlValues
[A1].Copy [C1]
End Sub

A+
 
G

galopin01

Guest
Re:
...Mais bien sur ce n'est pas une fonction personnalisée.
Mais tu dois faire une lapsus car une fonction personnalisée ne donne un résultat QUE sur la cellule active. Je pense que ce qui t'intéresse en fait c'est plutôt de geler le résultat.

En fait tu peux reprendre la macro précédente et l'adapter à n'importe quelle cellule en supprimant ActiveCell : dans ce cas tu n'as même pas besoin de copier le résultat sur une cellule de destination. Il suffit de l'adresser directement :

Sub Test()
[A1].Formula = "=Now()"
[A1].Copy
[A1].PasteSpecial Paste:=xlValues ' fige A1
' [A1].Copy [C1] ' inutile il suffit d'adresser directement C1
End Sub

Il y a probablement d'autres possibilités en fonction de tes besoins réels mais pour l'instant je ne cerne pas complètement. Un petit exemple en pièce jointe serait le bienvenu.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 555
Messages
2 089 547
Membres
104 208
dernier inscrit
laura29180