Date et heure dans nom de fichier [Résolu]

Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
- 27 oct. 2011 à 15:18 - Dernière réponse :
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
- 29 oct. 2011 à 01:56
Bonjour à tous,

J'ai besoin d'intégrer la date et heure présente dans une cellule dans un nom de fichier par une Sub (VBA Excel 2003): Evidemment le caratère ":" bloque!
J'ai fait un truc " pas beau" qui consite à préalablement copier la cellule en question dans une autre au format "Standard" et non "date heure", pour en récupérer le contenu sous format série...
J'ai aussi essayé de remplacer les caractères espace entre date et heure, et 2points dans heure , mais j'ai un message d'erreur que je ne comprend pas...
Ma question: Comment récupérer cette date et heure sous la forme valeur série DIRECTEMENT dans la Sub de création de nom de fichier?
Application.WorksheetFunction.Dateserial(...) ne marche pas

'Sélection
    RW = ActiveCell.Row                     'Valeur de la ligne sélectionnée

'Si pré-Copie de F&RW au format standard
    'DateMod=Sheets("Archives").Range("IV" & RW).Value 'Date Heure "en chiffres"

'Remplace  : par - eu espace par £ dans la variable DateMod
    Dim DateMode As String
    DateMod = Sheets("Archives").Range("F" & RW)
    DateMod = Replace(DateMod, ":", "-")
    DateMod = Replace(DateMod, " ", "£")

'Extraction Nom Archive depuis feuille "Archives"
    NomArch = _
        Sheets("Archives").Range("B" & RW).Value & "$" & _
        Sheets("Archives").Range("C" & RW).Value & "$" & _
        Sheets("Archives").Range("D" & RW).Value & "$" & _
        Sheets("Archives").Range("E" & RW).Value & "$" & _
        DateMod

'Création du Fichier Excel "NomArch" dans C:\Temp
    Workbooks.Add
    ChDir "C:\Temp"
    'message d'erreur sur le nom du fichier avec "Replace"
    'OK avec pré-copie format standard
    ActiveWorkbook.SaveAs Filename:="C:\Temp" & NomArch & ".xls"



Merci d'avance du coup de main !
Amicalement à tous

Rataxes64
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
- 29 oct. 2011 à 01:56
3
Merci
Salut jack,
Toujours autant sur la brèche !

J'ai regardé attentivement et cela reste assez lourd pour "simplement" récupérer la valeur date.
J'ai re-bataillé avec DateSerial, toujours sans succès...
Finalement, j'ai choisi de passer par une simple copie dans une cellule de report, dont je force ensuite le format, pour y récupérer la valeur série date + heure: ça ne prend que 2 lignes de code
    'Inséré dans une boucle For Next (Rw)
    'Date et Heure en colonne F ==> Date série xxxxxx,ssssss en colonne IV
    'Reprise Date  Heure  en colonne F
    Range("IV" & Rw).FormulaR1C1 = "=RC[-250]"
    'Mise au format série en colonne IV
    Range("IV" & Rw).NumberFormat = "General"

Je n'ai pas trouvé comment faire plus court sans passer par une cellule...

Merci de ton aide

Amicalement
Rataxes64

Merci CerberusPau 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de CerberusPau
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 27 oct. 2011 à 18:17
0
Merci
Salut

Tu peux utiliser la fonction décrite dans <cette source VB6> et ainsi récupérer un nom conforme sans problème.
Voir aussi la remarque de JonasVB dans les commentaires.

Quant à la sérialisation d'une date/heure, il y a les fonctions comme DateSerial qui font ça très bien.
Application.WorksheetFunction.Dateserial
est la fonction qui s'applique aux cellules : utilise le DateSerial de VBA, mais cette fonction ne te renverra qu'une date correctement formatée selon les options de présentation de date du système, c'est tout.
Tu peux aussi, par exemple, calculer le TimeStamp d'une date, c'est à dire le nombre de secondes écoulées depuis le 1/1/1970 00:00 (l'an 0 de l'informatique selon Apple).
Exemple :
DateDiff("s", #01/01/1970 00:00:00#, Now)
Tu obtiendras ainsi un chiffre de type Long.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.