Microsoft 365 Enregistrer un nom de fichier Excel à partir d'une cellule et pouvoir "Parcourir" pour l'enregistrement

maxime.dlv

XLDnaute Nouveau
Hello tout le monde !

Première fois que j'écris sur un forum pour demander à l'aide, mais en tout cas celui-ci m'a bien servi !

Je n'arrive néanmoins pas à m'en sortir avec ma macro.

J'ai créé une macro qui me permet d'enregistrer automatiquement mon fichier excel à partir d'une concatenation de cellules, le problème est que dans ma formule, le fichier s'enregistre automatiquement dans le dossier où j'ai ouvert mon fichier Excel alors que je souhaite "Parcourir" mes dossiers pour l'enregistrer où je souhaite.

La macro ne marche pas et l'erreur que j'ai est "end if sans if". J'ai essayé d'en enlever mais cela ne fonctionne pas...

Voici ma formule :

Sub EnregistrerFichierXLSM()
Dim Nom As String
Nom = Range("A1") & ".xlsm"
If ThisWorkbook.Path = "" Then 'si le document n'a jamais été enregistré
SendKeys Nom
Application.Dialogs(xlDialogSaveAs).Show 'boîte de dialogue Enregistrer sous
Else
If Range("A1") = "" Then MsgBox "Entrez le nom du fichier en A1", 48: Range("A1").Select: Exit Sub
If MsgBox("Voulez-vous enregistrer le fichier sous le nom " & Nom & " ?", 4) = 6 Then
On Error Resume Next
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' Clic sur Ok
Chemin = .SelectedItems(1)
Else
' Clic sur Annuler
Exit Sub
End If
End If
End If
End Sub


Si vous avez une solution cela me ferait gagner énormément de temps !!!

Je vous remercie, à bientôt !
 

patricktoulon

XLDnaute Barbatruc
perso je ferais comme ça
VB:
Sub EnregistrerFichierXLSM()
    Dim Nom$, fname As Variant
    Nom = Range("A1") & ".xlsm"
    'on interdit la A1 vide
    If Nom = "" Then MsgBox "Entrez le nom du fichier en A1", 48: Range("A1").Select: Exit Sub

    If ThisWorkbook.Path = "" Then    'si le document n'a jamais été enregistré
        fname = Application.GetSaveAsFilename(InitialFileName:=Nom, filefilter:="Excel Files (*.xlsm), *.xlsm", Title:="ENREGISTREMENT DE LA CAPTURE")
        If fname = False Then Exit Sub
        ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    
    Else    'si le document a déja été enregistré on le sauve tout court
        If MsgBox("Voulez-vous enregistrer le fichier sous le nom " & Nom & " ?", vbYesNo) = vbYes Then
            ThisWorkbook.Save    'on enregistre le fichier au meme endroit (écrase la version précédente )
        End If
    End If
End Sub
cela dit je vois pas très bien l'utilité si ce n'est Q'UNE SEULE FOIS le test thisworkbook.path=""

maintenant si A1 est amené a changer souvent ca veut dire que le dialog est tout le temps nécessaire
dans ce cas c'est plus simple
VB:
Sub EnregistrerFichierXLSM()
    Dim Nom$, fname As Variant
    Nom = Range("A1") & ".xlsm"
    'on interdit la A1 vide
    If Nom = "" Then MsgBox "Entrez le nom du fichier en A1", 48: Range("A1").Select: Exit Sub

        fname = Application.GetSaveAsFilename(InitialFileName:=Nom, filefilter:="Excel Files (*.xlsm), *.xlsm", Title:="ENREGISTREMENT DE LA CAPTURE")
        If fname = False Then Exit Sub
        ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    
  
End Sub
ajouter un displayalerts pour écraser le fichier existant si meme nom existe déjà (au cas ou)
 

maxime.dlv

XLDnaute Nouveau
Merci beaucoup pour vos réponses ! Ouvrir le dialog me permet de choisir l’endroit auquel je souhaite enregistrer le fichier. La cellule a1 change mais c’est une variable qui est la concaténation de plusieurs autres cellules, donc celle-là je n’y touche pas. Je pense simplement qu’il y a une erreur de syntaxe dans la partie qui concerne

Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' Clic sur Ok
Chemin = .SelectedItems(1)
 

Discussions similaires

Statistiques des forums

Discussions
314 708
Messages
2 112 090
Membres
111 416
dernier inscrit
philipperoy83