CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 2018
-
27 oct. 2011 à 15:18
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 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
CerberusPau
Messages postés377Date d'inscriptionlundi 3 avril 2006StatutMembreDernière intervention22 août 20181 29 oct. 2011 à 01:56
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...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 oct. 2011 à 18:17
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)