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

re

alors tu vas essayer avec Chdir !
bien entendu tu mets le bon chemin !

Code:
  ' rajoute ceci> ChDir chemin
    If test = False Then
       Dim Reponse As Variant
       Chemin$ = "c:\mesdocuments\compta\facture\"
       CheminEtFichierEnCours$ = Chemin$ & ActiveWorkbook.Name
       ChDir Chemin$
       Reponse = Application.Dialogs(xlDialogSaveAs).Show(CheminEtFichierEnCours$)
       'If LCase(Reponse) <> "vrai" Then Exit Sub ' < si fichier enregistré Reponse = Vrai sinon = Faux
    End If
 

aurelien.r

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

re

Nop' toujours pas (je l'avais déjà essayé je crois, mais sans résultat, peu importe ce que je marque)
Au fait, le $ que tu mets à la fin de chemin et cheminetfichierencours c'est pour déclarer une variable en variant sans l'avoir fait au début de la procédure c'est ça ?
 

Roland_M

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

re

mais non ! c'est une variable de type string !
comme MaVar% c'est un variable entière
comme MaVar& est de type long


pour revenir à ton problème, si Chdir ne fonctionne pas non plus, alors c'est grave !
ton affaire c'est un poisson d'avril en novembre !?
 
Dernière édition:

aurelien.r

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

Ah merci des infos ! Je ne savais pas que l'on pouvait déclarer les variables ainsi (j'ai commencé le VBA il n'y a pas un mois)

Je crains que ce soit le cas. Où que Excel 2013 ne soit buggé sur la fenêtre de SaveAs (car comme je te l'ai dit, la fenêtre Open, ça marche pour les 2 solutions que tu m'as proposé). Je vais devoir utiliser ma méthode folklorique j'pense :p

En tout cas merci beaucoup du temps passé sur mon problème ainsi que des solutions proposées :)
Si quelqu'un d'autre (sur excel 2013) a rencontré le même soucis et a réussi à le résoudre, ça serait sympa de faire partager
 

Roland_M

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

re

essai ceci ! tu mets le bon chemin !
attention si tu fais "enregistrer" le classeur sera enregistré avec la ligne qui suit !

EDIT: j'ai fais une erreur reprend le !
c'est> ActiveWorkbook.SaveAs Fichier$


Code:
    If test = False Then
       Chemin$ = "c:\mesdocuments\compta\facture\"
       CheminEtFichierEnCours$ = Chemin$ & ActiveWorkbook.Name
       ChDir Chemin$
       Fichier$ = Application.GetSaveAsFilename(CheminEtFichierEnCours$, fileFilter:="Excel Files (*.xlsm), *.xlsm")
       If Fichier$ <> "Faux" Then ActiveWorkbook.SaveAs Fichier$
    End If
 
Dernière édition:

aurelien.r

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

Ok c'est noté. Je pense que dans mon cas cela ne change pas grand chose dans le sens ou le fichier enregistrer est à la fois celui qui est actif (car on devra appuyer sur un bouton pour déclencher le code) et celui qui comporte le code en son sein.
Anyway, tu m'as débloqué d'un grand soucis :)
 

Roland_M

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

oui mais ici avec ceci c'est important !
ActiveWorkbook.SaveAs Fichier$

si tu sélectionnes un autre chemin ou nom de fichier dans la boite tu verras que Fichier$ contient le nouveau chemin !
fais un essai > msgbox Fichier$
juste après la boite et tu verras le résultat !

Fichier$ = Application.GetSaveAsFilename(CheminEtFichierEnCours$, fileFilter:="Excel Files (*.xlsm), *.xlsm")
Msgbox Fichier$
If Fichier$ <> "Faux" Then ActiveWorkbook.SaveAs Fichier$
 

Roland_M

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

puisque tu me dis que c'est le fichier de référence alors tu vas mettre Thisworkbook
j'avais suivi ton raisonnement du début mais c'est préférable Thisworkbook que activeworkbook

thisworkbook c'est le classeur en cours qui exécute le code. pour ton cas c'est ça qu'il faut mettre !
et
activeworkbook ce peut être un autre classeur que l'on active par code ! c'est totalement différent !
 

Discussions similaires

Réponses
2
Affichages
289

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 695
dernier inscrit
acimi