XL 2013 Bouton de sauvegarde

Ic0ne1300

XLDnaute Nouveau
Bonjour à tous !

Je reviens vers vous car j'ai créé un bouton sauvegarde mais je n'arrive pas à le programmer... En effet, j'aimerai dans un premier temps qu'il enregistre le fichier dans un chemin précis, tout en gardant un fichier vierge.
Dans un second temps, il faudrait que l'utilisateur puisse rentrer le nom qu'il veut donner au fichier
J'aimerai aussi voir pour peut être une deuxième solution qui permettrait justement d'éviter à l'utilisateur de rentrer le nom du fichier à sauvegarder mais plutôt que le bouton permette d'enregistrer en reprenant le nom du fichier d'origine automatiquement avec après ce que ma cellule L1 contient dedans (ma cellule contient le numéro de dossier donc j'aimerai qu'il apparaissent dans le nom du fichier automatiquement)

Merci d'avance pour votre aide ! :)
 

job75

XLDnaute Barbatruc
Bonjour Ic0ne1300,
tout en gardant un fichier vierge
Fichier vierge ? Et s'il y a des données que fait-on ?
il faudrait que l'utilisateur puisse rentrer le nom qu'il veut donner au fichier
rentrer le nom où ça ?
ma cellule contient le numéro de dossier donc j'aimerai qu'il apparaissent dans le nom du fichier
Quel dossier ? Quel est son nom ? Que fait-on si le dossier n'a pas de numéro ?

Ça fait beaucoup de questions !!!

A+
 

Ic0ne1300

XLDnaute Nouveau
Bonjour Ic0ne1300,

Fichier vierge ? Et s'il y a des données que fait-on ?

rentrer le nom où ça ?

Quel dossier ? Quel est son nom ? Que fait-on si le dossier n'a pas de numéro ?

Ça fait beaucoup de questions !!!

A+

Pour le fichier vierge je voulais dire, le fichier d'origine, où l'utilisateur n'a pas rentrer ses valeurs encore

Pour rentrer le nom, c'est à dire donner un nom au fichier lors de l'enregistrer via une messagebox par exemple, une façon où c'est l'utilisateur qui écrit le nom qu'il veut attribuer au fichier lors de l'enregistrement

Ensuite je voulais dire que dans mon formulaire excel, l'utilisateur est obligé de noter dans la cellule L1 le numéro du produit sur lequel il travaille. Etant donné que mon fichier excel contient déjà un nom, pourquoi pas lors du clic sur le bouton d'enregistrement, que le fichier s'enregistre avec le nom d'origine du fichier mais à laquelle se rajouterai le numéro rentré dans la cellule L1. Ex : "Nomfichierdorigine - 1234" (1234 étant le numéro inscrit dans la cellule L1)
 

job75

XLDnaute Barbatruc
Voyez le fichier joint et ces 3 macros à tester :
VB:
Sub Sauvegarder1()
Dim chemin$
With ThisWorkbook
    chemin = .Path & "\Mes fichiers\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    .SaveCopyAs chemin & .Name
End With
End Sub

Sub Sauvegarder2()
Dim chemin$, fichier$, ext$
With ThisWorkbook
    chemin = .Path & "\Mes fichiers\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    fichier = Trim(InputBox("Entrez le nom du fichier :", "Nom sans les caractères interdits \ / : * ? "" < > |"))
    If fichier = "" Then Exit Sub
    ext = Mid(.Name, InStrRev(.Name, ".")) '.xlsm ou .xls
    .SaveCopyAs chemin & fichier & ext
End With
End Sub

Sub Sauvegarder3()
Dim chemin$, fichier$, ext$
With ThisWorkbook
    chemin = .Path & "\Mes fichiers\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    fichier = Left(.Name, InStrRev(.Name, ".") - 1)
    ext = Mid(.Name, Len(fichier) + 1) '.xlsm ou .xls
    .SaveCopyAs chemin & Trim(fichier & " " & [L1]) & ext
End With
End Sub
 

Pièces jointes

  • Mon fichier.xlsm
    18.6 KB · Affichages: 17

Ic0ne1300

XLDnaute Nouveau
Merci beaucoup pour ta réponse ! J'ai essayer la deuxième sauf que je ne retrouve pas mon fichier malheureusement :( j'ai simplement remplacer \Mes fichiers\ par \Essai_PV\ qui est le nom de mon dossier dans laquelle je veux que ce soit enregistrer, mais il n'y a rien dedans...
 

Ic0ne1300

XLDnaute Nouveau
En fait tout est ok, merci ! Mais en admettant que le dossier où doit être enregistrer l'excel n'ai pas au même endroit que le fichier d'origine ?
Parce que dans votre programme il enregistre dans un dossier qui doit se trouver au même endroit que le fichier d'origine
 

Ic0ne1300

XLDnaute Nouveau
Ok ca marche niquel mais je me retrouve embeter pour un dernier truc, c'est que si la personne n'a pas fini de remplir le formulaire et qu'elle doit enregistrer (via le bouton du coup), quand elle va reprendre le fichier pour le finir, elle va une nouvelle fois cliquer sur le bouton enregistrer, et la ca va encore changer le nom du fichier et recréer un dossier, ca ne va pas remplacer la version qui existe déjà....
Savez-vous comment je peux faire ça ?
 

job75

XLDnaute Barbatruc
Ok ca marche niquel mais je me retrouve embeter pour un dernier truc, c'est que si la personne n'a pas fini de remplir le formulaire et qu'elle doit enregistrer (via le bouton du coup), quand elle va reprendre le fichier pour le finir, elle va une nouvelle fois cliquer sur le bouton enregistrer, et la ca va encore changer le nom du fichier et recréer un dossier, ca ne va pas remplacer la version qui existe déjà....
Savez-vous comment je peux faire ça ?
Alors il faut changer de méthode et donner au fichier de sauvegarde l'extension .xlsx (sans macro).

Et aussi lui ôter le ou les boutons "Sauvegarder", voyez le fichier joint et les macros complétées :
VB:
Sub Sauvegarder1()
Dim chemin$, fichier$
With ThisWorkbook
    chemin = .Path & "\Essai_PV\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    Enregistrer_xlsx chemin & Left(.Name, InStrRev(.Name, ".") - 1)
End With
End Sub

Sub Sauvegarder2()
Dim chemin$, fichier$
With ThisWorkbook
    chemin = .Path & "\Essai_PV\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    fichier = Trim(InputBox("Entrez le nom du fichier sans extension :", "Nom sans les caractères interdits \ / : * ? "" < > |"))
    If fichier = "" Then Exit Sub
    Enregistrer_xlsx chemin & fichier
End With
End Sub

Sub Sauvegarder3()
Dim chemin$, fichier$
With ThisWorkbook
    chemin = .Path & "\Essai_PV\" 'à adapter
    If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le dossier s'il n'existe pas
    fichier = Left(.Name, InStrRev(.Name, ".") - 1)
    Enregistrer_xlsx chemin & Trim(fichier & " " & [L1])
End With
End Sub

Sub Enregistrer_xlsx(fichier$)
Dim mem$, o As Object
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ThisWorkbook
    mem = .FullName
    .SaveAs fichier, 51 'extension .xlsx (sans macro)
    Workbooks.Open (mem) 'rouvre le fichier .xlsm ou .xls
    For Each o In .Sheets(1).DrawingObjects
        If o.Text Like "Sauvegarde*" Then o.Delete 'supprime les boutons
    Next
    .Save
    .Close
End With
End Sub
Pour enregistrer des modifications sur le fichier de sauvegarde il faudra utiliser la commande normale.
 

Pièces jointes

  • Mon fichier(1).xlsm
    21.1 KB · Affichages: 2

job75

XLDnaute Barbatruc
Avec le fichier (1) précédent il y a parfois chez moi des problèmes de mémoire et Excel plante.

Il vaut mieux ne pas rouvrir le fichier .xlsm et rester sur le fichier .xlsx de sauvegarde, fichier (2) avec :
VB:
Sub Enregistrer_xlsx(fichier$)
Dim o As Object
Application.DisplayAlerts = False
With ThisWorkbook
    For Each o In .Sheets(1).DrawingObjects
        If o.Text Like "Sauvegarde*" Then o.Delete 'supprime les boutons
    Next
    .SaveAs fichier, 51 'extension .xlsx (sans macro)
    MsgBox "Fichier de sauvegarde '" & .Name & "' créé..."
End With
End Sub
 

Pièces jointes

  • Mon fichier(2).xlsm
    19.5 KB · Affichages: 4

Discussions similaires

Réponses
4
Affichages
106