Macro pour renommer un fichier avant enregistrement

jayroom

XLDnaute Nouveau
Bonsoir le forum !

Je cherche à forcer un nom d'enregistrement pour un modèle excel (xlt) :
Mon modèle xlt propose directement d'"enregistrer sous" et non pas d'enregistrer sur mon fichier d'origine.
Je souhaiterais aller un peu plus loin :
Lorsque la fenêtre "enregistrer sous" apparaît, je souhaiterai que le nom d'enregistrement du fichier soit pré-rempli.
Ce nom d'enregistrement fait référence à des cellules de mon fichier.

A force de fouiller un peu, j'ai trouvé ce code que j'ai adapté à mes besoins :
Code:
Sub Enregistrer_sous()
    info1 = Sheets("Prêt>20k€").Range("AK26")
    info2 = Sheets("Prêt>20k€").Range("AK27")
    info3 = Sheets("Prêt>20k€").Range("AK28")
    info4 = Sheets("Prêt>20k€").Range("AO12")
    info5 = Sheets("Prêt>20k€").Range("BK12")
    info6 = Sheets("Prêt>20k€").Range("O12")
    enregistre = ActiveWorkbook.Path & "\" & "Fiche d'analyse" & "_" & info2 & " - " & info3 & "_" & info4 & ".xls"
    ThisWorkbook.SaveAS (enregistre)
    End Sub

Par contre, ce code me pose deux problèmes :
- il faut le lancer manuellement(il ne fonctionne pas en cliquant sur l'icone disquette, ni en faisant "fichier-enregistrer" ou "fichier-enregistrer sous".
- cette macro enregistre mon fichier ainsi renommé dans le répertoire où se trouve le fichier source.

Pensez-vous qu'il est possible :
- d'adapter cette macro pour la lancer automatiquement (en cliquant sur l'icône disquette par exemple) ?
- d'ouvrir le pop-up "enregistrer sous" et surtout de laisser aux utilisateurs la possibilité d'enregistrer le fichier dans le répertoire de leur choix ?

Un grand merci d'avance à tous ceux qui pourront m'accorder un peu de leur temps.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour renommer un fichier avant enregistrement

Bonjour jayroom, Papou:),

dans le module "thisworkbook" tu as l'événement "Workbook_BeforeSave", je t'engage à consulter l'aide vba à ce sujet te donnera des billes sur son fonctionnement et ses arguments...

Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'ton code
End Sub

bonne journée
@+
 

jayroom

XLDnaute Nouveau
Re : Macro pour renommer un fichier avant enregistrement

Bonjour Paritec, le forum !
En fait, quand je clique sur l'icône disquette de sauvegarde ou que je passe par "fichier-enregistrer", c'est la fenêtre enregistrer sous qui s'ouvre.
Je souhaite donc modifier le nom d'enregistrement proposé de mon fichier afin que les utilisateur n'"écrase" pas le fichier source.

En espérant avoir été un peu plus clair (désolé...) :confused:
Bonjour Jayrom le forum
tu peux traduire stp

a+
Papou:eek:
 

Paritec

XLDnaute Barbatruc
Re : Macro pour renommer un fichier avant enregistrement

Bonjour Jayrom le forum
comment pourrais-tu écraser le fichier puisque tu ne peux pas faire autrement que de l'enregistrer sous???
quand tu ouvres un fichier xlt il ne te donne pas la possibilité de l'enregistrer sous son propre nom!!
a+
papou:eek:
 

jayroom

XLDnaute Nouveau
Re : Macro pour renommer un fichier avant enregistrement

Bonjour Pierrot, Papou, le forum !

Pierrot, merci pour tes réponses : j'ai rajouté la fonction Beforesave dans ma macro et regardé l'aide excel pour cette macro (j'aurai peut-être également dû faire part de mon niveau en vba : débutant motivé !) :

Code:
 Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    info2 = Sheets("Prêt>20k€").Range("AK27")
    info3 = Sheets("Prêt>20k€").Range("AK28")
    info4 = Sheets("Prêt>20k€").Range("AO12")
    enregistre = ActiveWorkbook.Path & "\" & "Fiche d'analyse" & "_" & info2 & " - " & info3 & "_" & info4 & ".xls"
    ThisWorkbook.SaveAS (enregistre)
End Sub

En fait, ce que je souhaiterais, c'est qu'en cliquant sur l'icône de la disquette, la fenêtre "enregistrer sous" s'ouvre.
J'ai réussi à le faire simplement en enregistrant mon fichier xls en xlt.
Par contre, le code suivant m'enregistre directement mon fichier à un endroit (celui où se trouve le dossier source) :
Code:
 enregistre = ActiveWorkbook.Path & "\" & ..............

Sais-tu s'il est possible de laisser à l'utilisateur le choix de l'endroit d'enregistrement tout en proposant quand même un nom d'enregistrement pour le fichier ?
Par exemple en renommant enregistre = par name = ?

D'avance, merci beaucoup !
 

jayroom

XLDnaute Nouveau
Re : Macro pour renommer un fichier avant enregistrement

Bonjour Paritec,
tu as raison, il propose de l'enregistrer sous le même nom mais avec l'extention .xls.
Ce que je souhaiterais, c'est que quand la fenêtre "enregistrer sous" s'ouvre, un nom pré-rempli (en fonction du contenu de certaines cellules) soit proposé à la place du nom du fichier xlt.
Pour l'instant, je n'arrive pas à le faire avec Beforesave et je cherche encore...

Penses-tu que cela soit possible ?

Ps : désolé si je ne suis pas toujours clair : je viens de commencer en vba..........et excel : il me faut encore un peu de temps pour maîtriser votre langage (science ?) :p
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour renommer un fichier avant enregistrement

Re,

regarde ceci :
Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveAsUI Then
    Application.Dialogs(xlDialogSaveAs).Show "C:\MesDocs\Excel\classeur31.xls"
End If
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour renommer un fichier avant enregistrement

Re,
modifie ainsi

Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveAsUI Then
    With Application
        .EnableEvents = False
        .Dialogs(xlDialogSaveAs).Show "C:\MesDocs\Excel\classeur31.xls"
        .EnableEvents = True
    End With
End If
End Sub
 

jayroom

XLDnaute Nouveau
Re : Macro pour renommer un fichier avant enregistrement

Re,
Merci Pierrot : j'ai modifié mon code comme le tien et tout fonctionne !
J'ai ensuite voulu adapter ton nom "classeur31" en le remplaçant par le mien :
Code:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveAsUI Then
    With Application
        .EnableEvents = False
        .Dialogs(xlDialogSaveAs).Show "C:\MesDocs\Excel\"Fiche d'analyse" & "_" & Range("AK27") & " - " & Range("AK28") & "_" & Range("AO12") & ".xls"
        .EnableEvents = True
    End With
End If
End Sub
Le message 'erreur de compilation - erreur de synthaxe" apparaît et la ligne suivante est surlignée en jaune :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
La ligne suivante apparâit en rouge :
Code:
.Dialogs(xlDialogSaveAs).Show "C:\MesDocs\Excel\"Fiche d'analyse" & "_" & Range("AK27") & " - " & Range("AK28") & "_" & Range("AO12") & ".xls"

Sais-u ce que je n'ai pas bien fait ?
Est-ce la synthaxe de mon nom d'enregistrement qui ne convient pas ?

Merci d'avance
 

jayroom

XLDnaute Nouveau
Re : Macro pour renommer un fichier avant enregistrement

Bonjour Papou, Pierrot, le forum,

je viens de trouver la réponse à ma question donc je clôture mon post.
Merci à Papou et Pierrot pour leur aide ainsi qu'à Job75 qui m'a permis d'avancer grâce à son code https://www.excel-downloads.com/thr...ement-selon-le-nom-dune-cellule-excel.112530/

Pour ceux que ça pourrait intéresser, voici le code :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Sheets("Prêt>20k€").Range("AK27") = "" Or _
        Sheets("Prêt>20k€").Range("AK28") = "" Or _
        Sheets("Prêt>20k€").Range("AO12") = "" Then
        MsgBox "Afin de pouvoir enregistrer votre fichier, vous devez renseigner les éléments suivants dans la FA : Enseigne et ville du PDV, Structure juridique"
        Sheets("Prêt>20k€").Range("AK27").Select
        Cancel = True
    Else
        Nom = "Fiche d'analyse" & "_" & Sheets("Prêt>20k€").Range("AK27") & " - " & Sheets("Prêt>20k€").Range("AK28") & "_" & Sheets("Prêt>20k€").Range("AO12") & ".xls"
        If ThisWorkbook.Path = "" Then SendKeys Nom
    End If
End Sub

Bonne journée à tous et à bientôt,
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou