XL pour MAC Enregistrement d'un fichier avec sa date

meritein

XLDnaute Nouveau
Bonjour,
j'ai du mal à synthétiser ma demande d'où mon incapacité à trouver la réponse adéquate à mon problème sur le forum ou sur Google.
Admettons que j'ai un fichier qui porte le nom bonjourmonsieur.xlsb (il a déjà une macro et j'ai excel pour mac 2019). Le résultat que je voudrais atteindre est l'enregistrement de ce fichier de la façon suivante bonjourmonsieurjourmoisannée (jourmoisannée étant fourni automatiquement par excel au moment de la fermeture du fichier seulement mais, pas dans les enregistrements intermédiaires). Je ne sais si cela est assez clair. Merci d'avance pour votre aide.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Meritein,
Un essai en PJ avec dans ThisWorbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo Fin
    Application.DisplayAlerts = False
    tablo = Split(ThisWorkbook.Name, ".")   ' Separe le nom de l'extension
    ' Mettre "\" si Windows, mettre "/" si MAC
    Nom = ThisWorkbook.Path & "/" & tablo(0) & " " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & "." & tablo(1)
    With ActiveWorkbook
        .SaveAs Nom
        .Close
    End With
    Application.DisplayAlerts = True
    DoEvents
    ' A supprimer si on ne veut pas sortir d'XL après enregistrement
    Application.Quit
Fin:
End Sub
La date est mise sous la forme 29_01_2021 car le "/" n'est pas autorisé dans les noms de fichiers.
Attention, je pense que le séparateur pour PC et MAC est différent. "\" pour PC et "/" pour MAC.
La macro est faite pour MAC mais je n'ai pas pu le vérifier. :)
La dernière ligne est à supprimer si on ne veut pas sortir d'XL après enregistrement.
 

Pièces jointes

  • Essai.xlsm
    14 KB · Affichages: 15

job75

XLDnaute Barbatruc
Bonjour meritein,

Placez dans ThisWorkbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs Me.Path & Application.PathSeparator & "bonjourmonsieur" & Format(Date, "ddmmyyyy"), 50 'format .xlsb
End Sub
Perso j'utiliserais plutôt "yyyymmdd" pour que les fichiers soient classés chronologiquement dans le dossier.

Edit : salut sylvanu, pas vu quand j'ai posté.

A+
 

Pièces jointes

  • bonjourmonsieur.xlsb
    14.3 KB · Affichages: 8
Dernière édition:

meritein

XLDnaute Nouveau
Bonjour Meritein,
Un essai en PJ avec dans ThisWorbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo Fin
    Application.DisplayAlerts = False
    tablo = Split(ThisWorkbook.Name, ".")   ' Separe le nom de l'extension
    ' Mettre "\" si Windows, mettre "/" si MAC
    Nom = ThisWorkbook.Path & "/" & tablo(0) & " " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & "." & tablo(1)
    With ActiveWorkbook
        .SaveAs Nom
        .Close
    End With
    Application.DisplayAlerts = True
    DoEvents
    ' A supprimer si on ne veut pas sortir d'XL après enregistrement
    Application.Quit
Fin:
End Sub
La date est mise sous la forme 29_01_2021 car le "/" n'est pas autorisé dans les noms de fichiers.
Attention, je pense que le séparateur pour PC et MAC est différent. "\" pour PC et "/" pour MAC.
La macro est faite pour MAC mais je n'ai pas pu le vérifier. :)
La dernière ligne est à supprimer si on ne veut pas sortir d'XL après enregistrement.
Merci à tous les 2. Ci-dessous, la macro que j'ai copiée.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo Fin
Application.DisplayAlerts = False
tablo = Split(ThisWorkbook.Name, "'")
'"/"
Nom = ThisWorkbook.Path & "/" & tablo(0) & " " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & "." & tablo(1)
With ActiveWorkbook
.SaveAs Nom
.Close
End With
Application.DisplayAlerts = True
DoEvents
Application.Quit
Fin:
End Sub
Il ne se passe rien dans le nom du fichier enregistré. Qu'ai-je mal fait.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je ne comprends pas vos lignes :
VB:
tablo = Split(ThisWorkbook.Name, "'")
'"/"
Le séparateur Nom fichier et extension est le point, je suppose que c'est pareil sur le MAC donc :
Code:
tablo = Split(ThisWorkbook.Name, ".")
Si vous mettez un point d'arrêt après cette ligne vous devez obtenir :
tablo(0)= NomduFichier
tablo(1)=TypeExtension

Avez vous testé ma PJ sans y toucher, marche t-elle ?
 

job75

XLDnaute Barbatruc
Je sais, mais le post #1 fait état d'un nom de fichier plus "conventionnel".
Tu ne connais peut-être pas InStrRev :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn$
fn = Me.FullName
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs Left(fn, InStrRev(fn, ".") - 1) & Format(Date, "-dd-mm-yyyy") & ".xlsm", 52 'format .xlsm
End Sub
 

Pièces jointes

  • Mes.hommages.madame.xlsm
    15.6 KB · Affichages: 3
Dernière édition:

meritein

XLDnaute Nouveau
Tu ne connais peut-être pas InStrRev :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn$
fn = Me.FullName
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs Left(fn, InStrRev(fn, ".") - 1) & Format(Date, "-dd-mm-yyyy") & Mid(fn, InStrRev(fn, ".")), 52 'format .xlsm
End Sub
Encore merci. Les fichiers essai et Mes.hommages.madame enregistrent bien la date. Mais, à chaque fermeture la date de fermeture se rajoute à la date précédente. Cela n'allait pas sans le dire, mais, mon souhait serait d'avoir une seule date dans le nom du fichier (indiquant la date de dernière fermeture). Vous l'aurez compris, je ne connais rien au monde de la macro. Encore merci pour votre aide.
 

job75

XLDnaute Barbatruc
Mais, à chaque fermeture la date de fermeture se rajoute à la date précédente.
D'accord :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn$, sansextension
fn = Me.FullName
sansextension = Left(fn, InStrRev(fn, ".") - 1)
If sansextension Like "*-##-##-####" Then sansextension = Left(sansextension, Len(sansextension) - 11)
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs sansextension & Format(Date, "-dd-mm-yyyy") & ".xlsm", 52 'format .xlsm
End Sub
Mais il serait plus logique de faire toutes les modifications sur le même fichier sans date et de créer des fichiers .xlsx (code 51) sans macro :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs Left(Me.FullName, InStrRev(Me.FullName, ".") - 1) & Format(Date, "-dd-mm-yyyy") & ".xlsx", 51 'format .xlsx
End Sub
Voyez les 2 fichiers joints.
 

Pièces jointes

  • Mes.hommages.madame1.xlsm
    13.6 KB · Affichages: 4
  • Mes.hommages.madame2.xlsm
    15.7 KB · Affichages: 6

meritein

XLDnaute Nouveau
D'accord :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn$, sansextension
fn = Me.FullName
sansextension = Left(fn, InStrRev(fn, ".") - 1)
If sansextension Like "*-##-##-####" Then sansextension = Left(sansextension, Len(sansextension) - 11)
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs sansextension & Format(Date, "-dd-mm-yyyy") & ".xlsm", 52 'format .xlsm
End Sub
Mais il serait plus logique de faire toutes les modifications sur le même fichier sans date et de créer des fichiers .xlsx (code 51) sans macro :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False 'si le fichier existe déjà
Me.SaveAs Left(Me.FullName, InStrRev(Me.FullName, ".") - 1) & Format(Date, "-dd-mm-yyyy") & ".xlsx", 51 'format .xlsx
End Sub
Voyez les 2 fichiers joints.
Une simulation rapide sur les 2 fichiers semble montrer que cela fonctionne comme souhaité. Pour compléter cette simulation j'effectuerai d'autres manip demain.....................et reviendrais vers vous les cas échéant.
Merci encore et bonne soirée.
 

meritein

XLDnaute Nouveau
Une simulation rapide sur les 2 fichiers semble montrer que cela fonctionne comme souhaité. Pour compléter cette simulation j'effectuerai d'autres manip demain.....................et reviendrais vers vous les cas échéant.
Merci encore et bonne soirée.
Bonjour,
voici 2 images de ce qui se trouve dans un de mes fichiers pour lequel je souhaite enregistrer la date de fermeture. Visiblement, la date ne se met pas à jour automatiquement. Que dois-je faire pour réparer ce problème ? Merci.
 

Pièces jointes

  • Capture d’écran 2021-01-30 à 09.14.21.png
    Capture d’écran 2021-01-30 à 09.14.21.png
    21 KB · Affichages: 15
  • Capture d’écran 2021-01-30 à 09.15.43.png
    Capture d’écran 2021-01-30 à 09.15.43.png
    112.1 KB · Affichages: 15

Discussions similaires

Réponses
11
Affichages
511

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 499
dernier inscrit
BODELE