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.
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.
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.
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.
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
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.
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
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
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.
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.