XL 2013 Fenêtre enregistrer sous + chemin d'accès

aurelien.r

XLDnaute Nouveau
Bonsoir à tous,

Je suis sur un petit projet dont le code est le suivant :

Il a pour but d'enregistrer le fichier ouvert dans un autre dossier (le dossier étant déterminé par le nom de la feuille ouverte).
Cependant, lorsque le nom n'est pas existant, j'aimerais laisser le choix à l'utilisateur de choisir lui même le dossier de sauvegarde du fichier.
Code:
Public tab_ss_doss() As String
Sub boucle_generation_sousdossier(chemin_dossier As String)
Dim nom_dossier As String
Dim i As Long
If Right(chemin_dossier, 1) <> "\" Then
    chemin_dossier = chemin_dossier & "\"
End If
i = 0
    nom_dossier = Dir(chemin_dossier, vbDirectory)
    While nom_dossier <> ""
        If nom_dossier <> "." And nom_dossier <> ".." Then
            ReDim Preserve passage_facture.tab_ss_doss(i)
            passage_facture.tab_ss_doss(i) = nom_dossier
            i = i + 1
        End If
        nom_dossier = Dir
    Wend
End Sub

Sub sauvegarde_facture()
Dim nom As String
Dim chemin_depart As String
Dim chemin_arrivee As String
Dim test As Boolean
test = False
chemin_depart = Left(ActiveWorkbook.FullName, InStrRev(ActiveWorkbook.FullName, "\"))
nom = Left(ActiveWorkbook.name, InStr(ActiveWorkbook.name, ".") - 1)
    Call passage_facture.boucle_generation_sousdossier(gene.chemin_facture) 'gene.chemin_facture est le nom du dossier d'arrivée dont j'extrais les sous-dossiers. Il est définie automatiquement au lancement du classeur excel dans une Auto-Open.

    For i = LBound(passage_facture.tab_ss_doss) To UBound(passage_facture.tab_ss_doss)
        If nom = passage_facture.tab_ss_doss(i) Then
            chemin_arrivee = gene.chemin_facture & nom & "\"
            ActiveWorkbook.SaveAs Filename:=chemin_arrivee & nom & ".xlsm"
            Kill chemin_depart & nom & ".xlsm"
            test = True
        End If
    Next
    If test = False Then
        'C'est ici que ce trouve mon problème : je cherche une fonction qui ouvre le fenêtre Sauvegarder Sous, dans le dossier chemin_arrivee et dont le nom est déjà celui du fichier actuel.
    End If
End Sub

je cherche une fonction qui ouvre le fenêtre Sauvegarder Sous, dans le dossier chemin_arrivee et dont le nom est déjà celui du fichier actuel. (l'endroit du problème est en commentaire dans le code).
Cette fonctionnalité serait très simple d'utilisation et flexible pour l'utilisateur par rapport à un userform qui propose les sous-dossiers présents (que j'ai dans le tableau tab_ss_doss)

Je vous remercie d'avance si vous avez des idées qui fonctionnent (ou pour toute autre amélioration du code si vous y voyez des aberrations, je débute et donc toujours à la recherche de conseils).

Aurélien
 

Roland_M

XLDnaute Barbatruc
Re : Fenêtre enregistrer sous + chemin d'accès

bonjour,

voir avec ceci:

Code:
    'C'est ici que ce trouve mon problème : je cherche une fonction qui ouvre la fenêtre Sauvegarder Sous, dans le dossier chemin_arrivee et dont le nom est déjà celui du fichier actuel.
    If test = False Then
       Dim Reponse As Variant
       CheminEtFichierEnCours$ = ThisWorkbook.FullName
       Reponse = Application.Dialogs(xlDialogSaveAs).Show(CheminEtFichierEnCours$)
       'If LCase(Reponse) <> "vrai" Then Exit Sub ' < si fichier enregistré Reponse = Vrai sinon = Faux
    End If


EDIT:
ThisWorkbook.FullName > c'est le classeur en cours avec le code !
ActiveWorkbook.FullName > peut être un classeur activé autre que le ThisWorkbook !
 
Dernière édition:

aurelien.r

XLDnaute Nouveau
Re : Fenêtre enregistrer sous + chemin d'accès

Merci Roland pour ta réponse rapide ainsi que les conseils.

Cependant, lorsque je test ton code, je n'arrive pas sur le lieu souhaité.
La commande Application.Dialogs(xlDialogSaveAs).Show permet d'ouvrir la boite de dialogue d'enregistrer sous. Naturellement dans le dossier du fichier d'utilisation.
L'idée serait que le fichier d'utilisation soit dans un dossier "C:MesDocuments/Dossier1" et que lorsque j'utilise ce code, ça me propose directement "C:\MesDocuments\Dossier2\Dossier3" pour m'éviter de revenir en arrière et faire des clicks inutiles.

Aurélien

Ps : j'ai bien modifier le texte CheminEtFichierEnCours$ = "C:\mesdocuments\dossier2\dossier3\"
 

Roland_M

XLDnaute Barbatruc
Re : Fenêtre enregistrer sous + chemin d'accès

re

tu as dit:
"Cependant, lorsque le nom n'est pas existant, j'aimerais laisser le choix à l'utilisateur de choisir lui même le dossier de sauvegarde du fichier. "

donc, forcément, chemin inconnu !?

ensuite:
"je cherche une fonction qui ouvre le fenêtre Sauvegarder Sous, dans le dossier chemin_arrivee et dont le nom est déjà celui du fichier actuel."

donc, chemin du fichier en cours soit Thisworkbook ou activeworkbook !?

tu n'indiques rien d'autre pour faire autrement !?
 

aurelien.r

XLDnaute Nouveau
Re : Fenêtre enregistrer sous + chemin d'accès

Voilà comment se fait mon programme.

Dans le dossier1 : je met tous mes devis sous le nom "Chantier Levallois Nov 2015" (par exemple)
Ces devis sont en format .xlsm

Ensuite il faut que je passe le devis en facture quand il est accepté. Et le classeur "Chantier Levallois Nov 2015.xlsm" doit se retrouver non plus dans Dossier 1 mais dans C:\MesDocuments\Compta\Facture\Chantier Levallois Nov 2015\Chantier Levallois Nov 2015.xlsm"


Donc soit le dossier existe directement avec le bon nom et le programme le fera automatiquement, soit il n'existe pas (ou avec des erreurs de majuscules, minuscules, espaces ...) et donc je veux permettre à l'utilisateur de choisir lui même le dossier Compta\Facture\choix de l'utilisateur. Et donc afficher la boite de sauvegarde directement sur le dossier c:\mesdocuments\compta\facture\

J'espère que je me suis exprimé de manière plus compréhensive :p
 
Dernière modification par un modérateur:

Roland_M

XLDnaute Barbatruc
Re : Fenêtre enregistrer sous + chemin d'accès

bonsoir,

alors voir comme ceci, avec "c:\mesdocuments\compta\facture\" & ActiveWorkbook.Name

EDIT: même si c'est affiché Mes Documents il s'agit de> C:\Documents\
si c'est ça tu modifieras comme ceci> "C:\Documents\compta\facture\" & ActiveWorkbook.Name

Code:
    'C'est ici que ce trouve mon problème : je cherche une fonction qui ouvre la fenêtre Sauvegarder Sous, dans le dossier chemin_arrivee et dont le nom est déjà celui du fichier actuel.
    If test = False Then
       Dim Reponse As Variant
       CheminEtFichierEnCours$ = "c:\mesdocuments\compta\facture\" & ActiveWorkbook.Name
       Reponse = Application.Dialogs(xlDialogSaveAs).Show(CheminEtFichierEnCours$)
       'If LCase(Reponse) <> "vrai" Then Exit Sub ' < si fichier enregistré Reponse = Vrai sinon = Faux
    End If
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Fenêtre enregistrer sous + chemin d'accès

re

CE N'EST PAS POSSIBLE !
la boite s'ouvre sur l'endroit du chemin indiqué obligatoirement !
si toutefois ton chemin est valable ! sinon oui tu restes sur le dossier en cours !
c'est donc que ton chemin est incorrecte !
pour preuve essaies ceci
CheminEtFichierEnCours$ = "c:\" & ActiveWorkbook.Name
et tu verras !

EDIT: j'ai rectifié mon message !
 
Dernière édition:

aurelien.r

XLDnaute Nouveau
Re : Fenêtre enregistrer sous + chemin d'accès

Merci beaucoup, personnellement j'ai pas trouvé grand chose de concluant sur le net jusque maintenant.

La seule solution à laquelle j'ai pensé, c'est quelque chose du type :
si le test est faux :
sauvegarder sous le fichier à l'emplacement où je désire ouvrir la boite de dialogue
supprimer le fichier "source"
ouvrir la boite de dialogue
mettre un test pour faire l'inverse si on ne sauvegarde pas (pour garder le fichier "devis" dans le bon dossier pour le retrouver plus tard)

Mais je trouve la manip' assez longue, illisible et fastidieuse...
 

Discussions similaires

Réponses
2
Affichages
289

Statistiques des forums

Discussions
312 393
Messages
2 087 965
Membres
103 687
dernier inscrit
olivier72