Forum Clubic

[Excel] SaveAs avec format de date spécial

Bonjour,

La case A4 de la Feuil1 affiche une date sous la forme “1 janvier 2007”, qui n’est pas la date du jour

Je désire faire une macro qui m’enregistre le classeur en cours sous:

CheminDuClasseurEnCours \ Année de A4 \ Mois de A4 \ 2007-01-01-Lundi.xls

Ce qui me permettrai de pouvoir trier ces sauvegardes par ordre de date.


Sub save()
chemin = ThisWorkbook.Path
ActiveWorkbook.SaveAs chemin & ....je ne sais pas quoi mettre .... & ".xls"
End Sub

Voilà où j’en suis, mais je ne comprend pas la suite.

Si quelqu’un pouvais m’aider, ce serait le bonheur :super:
merci

après de nombreux essais, j’ai presque réussi:


Sub save()
chemin = ThisWorkbook.Path
ActiveWorkbook.SaveAs chemin & "\" & Year(Sheets("Feuil1").Cells(4, 1)) & "\" & Month(Sheets("Feuil1").Cells(4, 1)) & "\" & _
Year(Sheets("Feuil1").Cells(4, 1)) & "-" & Month(Sheets("Feuil1").Cells(4, 1)) & "-" & Day(Sheets("Feuil1").Cells(4, 1)) & "-Lundi.xls"
End Sub

RacineDuDossier\2007\12\2007-10-19-Lundi.xls

Donc j’ai déjà réussi à moitié car j’aimerai que le dossier “12” soit nommé “Décembre” et si possible “12-décembre” (01-janvier ; 02-février; etc.)
car je veux trier les dossier “Mois” par nom.

Je suis compliqué hein :pt1cable:

essaie ce bout de code

Sub testsaveas()
   chemin = ThisWorkbook.Path
    x = chemin & Format(Cells(4, 1), "\\yyyy\\mm-mmmm\\yyyy-mm-dd-ddd") + ".xls"
    MsgBox x
End Sub

Il ne correspond pas tout à fait à l’exemple que tu donnes, parce que je ne vois pas comment on obtient décembre à partir de 2007/10/19, ni pourquoi le ‘lundi’ est en dur, mais tu dois pouvoir adapter facilement en re référant à l’aide sur ‘format’

salut

il faut pour avoir le nom du jour que tu cherche du coté de la fonction
weekday et weekdayname

WeekdayName(Weekday(Now, vbMonday), False)

te donne le nom du jour courant

MonthName(Month(Now), False)

te donne le nom du mois courant

sacahnt que les fonctions weekday renvoie une valeur de 1 à 7 pour le numéro du jour de la semaine (en précisant que le premier jour est un lundi (vbmonday), et month te donnes le numéro du mois (ex:mars=3)

vaec ça, tu peux déjà faire pas mal de chose

coucou

cette fonction m interesse mais j aimerais qu il y ait un chrono, car c est un classeur partagé et j’aimerai qu’il y ait à la fin genre un numéro d enregistrement

nomdufichier_datedujour_03.xls

nomdufichier_datedujour_04.xls etc …par exemple

merci

Si tu sais que le numero d’index du fichier est compris est compris entre un ‘_’ et le point séparateur de l’extension, il suffit d’isoler cette partie, de la transformer en nombre et de l’incrémenter.
Si on reprend la fonction donnée plus haut, il faut la modifier ainsi :

Sub testsaveas()
   chemin = ThisWorkbook.Path
   fichier = ThisWorkbook.Name
   finIndex = InStr(fichier, ".xls")
   debIndex = InStrRev(fichier, "_")
   indexStr = Mid(fichier, debIndex + 1, finIndex - debIndex - 1)
   indexNum = Val(indexStr)
   x = chemin & Format(Cells(4, 1), "\\yyyy\\mm-mmmm\\yyyy-mm-dd-ddd") + "_" + Format(indexNum + 1, "00") + ".xls"
   MsgBox x
End Sub

Coucou

peux tu me traduire cette fonction, j’ai un bug et j’aimerai bien savoir à quoi cela correspond et du moins essayer de la modifier moi meme

indexStr = Mid(fichier, debIndex + 1, finIndex - debIndex - 1)

dis moi quand tu mets fichierMid (fichier, etc, etc 1) dans ta fonction, il faut que j’indique le nom de fichier ou pas?

ma cellule a10 est en format date insérée par une macro, j’ai donc mis cells (10.1)
merci

On part du principe que le nom de fichier est de la forme xxx_date_index, avec index de 00 à 99
1- on stocke ce nom dans la variable fichier (variable de type string)
2-debindex et finindex sont les positions dans fichier des délimiteurs de la partie index (donc respectivement __ et .)
3- Mid permet d’extraire la sous-chaine qui nous intéresse (le numéro d’index sous forme de texte).

Il faut laisser fichier, c’est le nom de la variable.

OK, mais un format date inséré par une macro, je me méfie : vérifie en mettant provisoirement le format de la cellule en standard ou en lui appliquant la fonction ESTNUM() qu’elle contient bien un nombre et pas une chaine de caractères.
Si tu n’es pas sûr, donne la ligne macro qui remplit la cellule

Quel type ? excel ou VBA ?
A quel endroit ?

Salut

Bon j’ai réussi grace à vous, je vous le dis un peu tard, mais vieux motard que jamais.

voici mon code:


Sub save()
chemin = ThisWorkbook.Path
a4 = Sheets("Mafeuille").Cells(4, 1)
ActiveWorkbook.save  'sauvegarde le classeur actuel et le quitte'
    ActiveWorkbook.SaveAs chemin & "\" & Year(a4) & "\" & Month(a4) & "-" _
    & MonthName(Month(a4)) & "\" & Year(a4) & "-" & Month(a4) & "-" & Day(a4) & "-" _
    & WeekdayName(Weekday(a4, vbMonday), False) & ".xls"
End Sub

J’aurai aimé par contre que si un dossier n’existe pas, il le crée au lieu de me donner une erreur.

j’ai créé les 12 fichiers des 12 mois donc ce n’est pas impératif, mais c’est surtout pour ma culture.

merci les gars

Il faut pour cala qu’avant d’utiliser le dossier tu en testes l’existence et que tu le crées le cas échéant.
Pour cela, utilise la commande Dir avec l’argument vbdirectory.
Regarde l’aide de la commande dans VBA, et surtout l’exemple qui est donné, il est assez facile à adapter