XL 2021 Fermer et enregistrer avec "NOM DE FICHIER" = contenu de A3

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous et bon et beau WE :)

Dans la continuité de ce fil : https://excel-downloads.com/threads...t-dou-il-a-ete-ouvert.20076612/#post-20587395

Voici ma 2eme question
SI A4 EST DIFFERENT DE A3 = Le classeur aura été renommé
Mon but est de BLOQUER SON UTILISATION en le Fermant et l'enregistrer avec un "NOM DE FICHIER" = contenu de A3

Exposé de l'action :
1 si le classeur ouvert na pas été renommé
Grâce au code de Gérard, au clic sur la X pour fermer = enregistre, ferme le fichier et quitte l'application

2 Si le classeur ouvert a été renommé
Préalable :
la cellule A3 contient le Nom du fichier donné à la fermeture précédente
la cellule A4 contient le Nom du fichier qui est ouvert
Action :
au clic sur la X pour fermer :
= Fermer et enregistrer avec "NOM DE FICHIER" = contenu de A3

J'ai fait des recherches et tenté quelques codes sans succès
Auriez-vous le bon code ?
Je joins le fichier test

Un grand merci à toutes et à tous,
Je continue mes recherches....
:)
 

Pièces jointes

  • enregistrer sous.xlsm
    24.1 KB · Affichages: 4
Dernière édition:
Solution
Re-Bjr :)
La solution :

VB:
Sub Sauve()
    Dim Chemin$, Nom$
    NomFichier = Range("A3")     ' A modifier
    Chemin = ThisWorkbook.Path & "\"    ' A modifier si différent du dossier courant, doit se treminer par "\"
    ActiveWorkbook.SaveAs filename:=Chemin & NomFichier, Password:=MotDePasse
End Sub
A mettre dans un module et :
Code:
Private Sub Workbook_Open()
[A4].Value = ThisWorkbook.Name: [A4].Value = [a7]
If [A3] <> [A4] Then
    MsgBox ("Hola ! Ce fichier a été renommé : " & [A4].Value)
    Application.EnableEvents = True
    Sauve
    If Workbooks.Count = 1 Then Application.Quit Else Me.Close
End If
End Sub
'Gérard
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If [A3] = [A4] Then
    Dim wb As Workbook
        For Each wb In...

Usine à gaz

XLDnaute Barbatruc
Re-Bjr :)
La solution :

VB:
Sub Sauve()
    Dim Chemin$, Nom$
    NomFichier = Range("A3")     ' A modifier
    Chemin = ThisWorkbook.Path & "\"    ' A modifier si différent du dossier courant, doit se treminer par "\"
    ActiveWorkbook.SaveAs filename:=Chemin & NomFichier, Password:=MotDePasse
End Sub
A mettre dans un module et :
Code:
Private Sub Workbook_Open()
[A4].Value = ThisWorkbook.Name: [A4].Value = [a7]
If [A3] <> [A4] Then
    MsgBox ("Hola ! Ce fichier a été renommé : " & [A4].Value)
    Application.EnableEvents = True
    Sauve
    If Workbooks.Count = 1 Then Application.Quit Else Me.Close
End If
End Sub
'Gérard
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If [A3] = [A4] Then
    Dim wb As Workbook
        For Each wb In Workbooks
        If wb.Name <> Me.Name Then wb.Close wb.Path <> "" 'sauvegarde uniquement si le fichier est enregistré
    Next
Me.Save
Application.Quit 'ferme Excel
End If
End Sub
Je joint le fichier test
:)
 

Pièces jointes

  • enregistrer sous.xlsm
    25.1 KB · Affichages: 1

Usine à gaz

XLDnaute Barbatruc
Re-Bjr : supprimer le mauvais fichier (celui qui avait été renommé)

J'ai fait pas mal de recherches et tentatives sans vraiment y arriver Grrrr!!!!! :mad:
Voici le code que j'ai retenu mais qui ne fonctionne pas :
VB:
Sub suppr() 'Note le backslash (\) en fin du répertoire
Const Lw = "c:\"
Const path = "c:\"
Const file = Range("A4")
On Error GoTo error:
Kill file
MsgBox " Classeur " & file & "a été supprimé!"
Exit Sub
error:
MsgBox " Impossible de trouver un fichier avec le nom " & _
file & " être trouvé!"
End Sub
Il me donne cette erreur :
1685809536840.png

Si vous voulez bien m'aider, je joins le fichier...
Et le continue mes recherches
:)
 

Pièces jointes

  • enregistrer sous 2023 06 03.xlsm
    28 KB · Affichages: 5

Phil69970

XLDnaute Barbatruc
Re

Avec cette version tu n'auras plus de message si le fichier n'existe pas

VB:
Sub Sup()
On Error Resume Next
Chemin = "C:\"
Kill Chemin & Range("A4").Value & ".xlsm"
If Err = 53 Then
    MsgBox "Pas de fichier à supprimer"
    Exit Sub
End If
MsgBox "Fichier supprimé"
End Sub

C:\ est la lettre sur le disque dur ou est ton fichier
Et A4 ==> Nom du fichier à supprimer
Ton fichier sur le DD devait être ==> C:\Nom du fichier à supprimer

@Phil69970
 

Usine à gaz

XLDnaute Barbatruc
Re

Avec cette version tu n'auras plus de message si le fichier n'existe pas

VB:
Sub Sup()
On Error Resume Next
Chemin = "C:\"
Kill Chemin & Range("A4").Value & ".xlsm"
If Err = 53 Then
    MsgBox "Pas de fichier à supprimer"
    Exit Sub
End If
MsgBox "Fichier supprimé"
End Sub

C:\ est la lettre sur le disque dur ou est ton fichier
Et A4 ==> Nom du fichier à supprimer
Ton fichier sur le DD devait être ==> C:\Nom du fichier à supprimer

@Phil69970
Exact...
Mais j'ai ce message :
1685814300618.png

Pourtant mes 2 fichiers sont bien sur mon "bureau".
- enregistrer sous 2023 06 05 est le fichier qui a été renommé et ouvert,
- enregistrer sous 2023 06 03 est le fichier avec le nom d'origine qui a été sauvegardé
:)
 

Phil69970

XLDnaute Barbatruc
Re

Lionel
Je doute que C:\enregistrer sous 2023 06 05 soit le chemin de ton fichier mais plutôt

C:\Users\TONUSER\Desktop

VB:
Sub Sup()
On Error Resume Next
Chemin = Environ("UserProfile") & "\Desktop\"
Kill Chemin & Range("A4").Value & ".xlsm"
If Err = 53 Then
    MsgBox "Pas de fichier à supprimer"
    Exit Sub
End If
MsgBox "Fichier supprimé"
End Sub

@Phil69970
 

Discussions similaires

Statistiques des forums

Discussions
313 309
Messages
2 097 032
Membres
106 812
dernier inscrit
Excellou74